我对这一点感到非常难过,而我对正则表达式的完全缺乏技巧也无济于事。
这是我想要实现的目标:
- 我有多个NSStrings,其中包含我从网站上下载的博客文章中的文本(和链接)。
- 我正在使用UIWebView和我正在创建的HTML页面,以便我可以拥有内嵌图像,视频等。
- 博文包含两种类型的YouTube链接 -
<iframe src="//www.youtube.com/embed/VIDEOID" height="405" width="720" allowfullscreen="" frameborder="0"></iframe>
和
http://youtu.be/VIDEOID
有两种不同类型的网址,因为博客使用Wordpress,而Wordpress会自动检测YouTube链接,这意味着不需要嵌入。第一种类型的嵌入也不起作用,因为它依赖于浏览器能够请求http或https(因此在URL中缺少它),这显然在UIWebViews中不起作用。
基本上我想要做的是从两种类型的URL中找到VideoID,然后从NSString中取出现有的URL,并用正确的嵌入类型替换它,并附加正确的VideoID。我还需要保持字符串的其余部分完好无损。最重要的是,它需要在同一个NSString中处理多个URL,因为每个帖子都有未知数量的视频。
这是我到目前为止的代码,但我知道这是非常错误的,我没有达到我想要的目标:
NSString *regexToReplaceRawLinks = @"(https?://)?(www\\.)?(youtu\\.be/|youtube\\.com)?(/|/embed/|/v/|/watch\\?v=|/watch\\?.+&v=)([\\w_-]{11})(&.+)?";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexToReplaceRawLinks
options:NSRegularExpressionCaseInsensitive
error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string
options:0
range:NSMakeRange(0, [string length])
withTemplate:@"<iframe width=\"320\" height=\"180\" src=\"http:\/\/www.youtube.com\/embed\/$1\" frameborder=\"0\" allowfullscreen><\/iframe>"];
NSLog(@"%@", modifiedString);
return modifiedString;
如果有人能指出我正确的方向,我会非常感激,尤其是正则表达式
答案 0 :(得分:0)
假设//
可以作为您网址的开头(正如您在示例中所示),您可以尝试使用此正则表达式:
(?:https?:)?//(?:[^.]*\.)?youtu(?:\.be|be\.com)(?:/|/embed/|/v/|/watch/?\?(?:.+&)?v=)([\w-]{11})
如果需要,只需从上方与\
转义\\
。