1

xcode で基本的な正規表現を実行しようとしていますが、うまくいきません。

NSString *urlString = @"http://www.youtube.com/v/3uyaO745g0s?fs=1&hl=en_US";

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"/.*?v=(.*)&.*/" options:NSRegularExpressionCaseInsensitive error:&error];
NSTextCheckingResult *fmis = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, [urlString length])];

if(fmis) {
    NSRange match = [fmis range];
    NSLog(@"%i", match.location);
}

3uyaO745g0s基本的に、urlStringを吸い出そうとしているだけです。正規表現が最善の方法だと思いますか?私の質問を見てくれてありがとう。

** 編集 **

時々、URL は次のようになります:http://www.youtube.com/watch?v=3uya0746g0sそして、そこからも vid をキャプチャする必要があります。

4

2 に答える 2

3

NSURLオブジェクトを作成して魔法をかけてもらう方がはるかに簡単だと思います。

NSString *urlString = @"http://www.youtube.com/v/3uyaO745g0s?fs=1&hl=en_US";
NSURL *url = [NSURL URLWithString:urlString];

// Since you're targeting the last component of the url
NSString *myMatch = [url lastPathComponent]; //=> 3uyaO745g0s

NSURLオブジェクトのさまざまな部分にアクセスする方法の詳細については、こちらを参照してください

于 2012-11-15T23:27:50.987 に答える
1

YouTube の URL にはさまざまな種類があります。多分あなたはこれを試すことができます

NSString *urlString = @"http://www.youtube.com/v/3uyaO745g0s?fs=1&hl=en_US";
NSString *regEx = @"[a-zA-Z0-9\\-\\_]{11}";
NSRange idRange = [urlString rangeOfString:regEx options:NSRegularExpressionSearch];
NSString *youtubeID = [urlString substringWithRange:idRange];

この正規表現は here で見つかりました。NSRegularExpressionまた、単純な検索に使用する必要はありません:)

これはかなり良い解決策だと思いますが、より信頼性の高い結果が必要な場合は、その回答で別の正規表現を試してください。

于 2012-11-15T23:43:15.070 に答える