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];

我在这里找到了这个正则表达式。而且您不必NSRegularExpression用于简单的搜索:)

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

于 2012-11-15T23:43:15.070 回答