ios NSRegularExpression麻烦

时间:2012-11-15 23:05:32

标签: regex cocoa nsregularexpression

我正在尝试在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);
}
基本上,我只是试图从urlString中取出3uyaO745g0s。我假设正则表达式是最好的方法吗?谢谢你回答我的问题。

**编辑**

有时网址看起来像这样:http://www.youtube.com/watch?v=3uya0746g0s我也必须从中捕获视频。

2 个答案:

答案 0 :(得分: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对象的各个部分here

答案 1 :(得分:1)

Youtube网址有很多种类型。 也许你可以试试这个

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进行简单搜索:)

我认为这是一个非常好的解决方案,但如果您想要更可靠的结果,那么请在该答案中尝试另一个正则表达式。