iphone – Youtube视频ID从URL – 目标C

我基本上有一个作为NSString的Youtube网址,但是我需要提取url中显示的视频ID。我发现了许多关于如何在PHP或其他基于网络的编程语言中完成的教程,但没有一个客观的…

我基本上正在寻找一个方法,要求一个NSString url作为参数,并将视频ID作为另一个nsstring返回…

任何人知道如何做或任何教程在那里?

最佳答案
因此,YouTube网址如下所示:

http://www.youtube.com/watch?v=oHg5SJYRHA0

您感兴趣的视频ID是最终的部分(oHg5SJYRHA0)….尽管不一定在最后,因为YouTube网址可能包含查询字符串中的其他参数。

你最好的选择是使用正则表达式和Foundation的NSRegularExpression课程。我认为这种方法是用在您发现的其他语言教程中 – 请注意,正则表达式的内容在包含它们的任何语言或工具包中都是相同的,因此在这些教程中找到的任何正则表达式都应该工作为你。 (我建议您打破v =并采取正好11个字符的方法,因为这可能会导致正则表达式更强大的各种失败模式。)

要找到视频ID,您可能需要像v =([^&])这样的正则表达式。 v =使我们到查询网址的正确部分(如果我们得到一些像watch?fmt = 22& v = oHg5SJYRHA0)。圆括号会成为一个捕获组,因此我们只能提取视频ID,而不能提取我们用来找到的其他匹配字符,而在括号内,我们会查找一个或多个不是&符号的字符序列,这样可以确保我们得到v =任何字段中的所有内容,如果你收到一个像手表这样的URL,就没有字段?v = oHg5SJYRHA0& rel = 0。

无论您使用这个还是另一个正则表达式,很可能您将使用捕获组。 (如果没有,rangeOfFirstMatchInString:options:range:就是你需要的,就像Dima的答案一样)。可以使用firstMatchInString:options:range:或类似的方法获取捕获组的内容(如NSTextCheckingResult对象):

NSError *error = NULL;
NSRegularExpression *regex = 
[NSRegularExpression regularExpressionWithPattern:@"?.*v=([^&]+)"
                                          options:NSRegularExpressionCaseInsensitive
                                            error:&error];
NSTextCheckingResult *match = [regex firstMatchInString:youtubeURL
                                                options:0
                                                  range:NSMakeRange(0, [youtubeURL length])];
if (match) {
    NSRange videoIDRange = [match rangeAtIndex:1];
    NSString *substringForFirstMatch = [youtubeURL substringWithRange:videoIDRange];
}

转载注明原文:iphone – Youtube视频ID从URL – 目标C - 代码日志