Ios YouTube视频ID匹配和替换

Ios YouTube视频ID匹配和替换,ios,objective-c,regex,nsregularexpression,Ios,Objective C,Regex,Nsregularexpression,在这一点上我完全被难住了,我完全缺乏正则表达式的技能也于事无补 以下是我努力实现的目标: -我有多个NSString,其中包含我从在线网站下载的博客文章中的文本(和链接)。 -我正在使用UIWebView和一个动态创建的HTML页面,这样我就可以有内联图像、视频等。 -博客帖子包含两种类型的YouTube链接: 及 有两种不同类型的URL,因为博客使用Wordpress,Wordpress自动检测YouTube链接,这意味着不需要嵌入。另外,第一种类型的嵌入不起作用,因为它依赖于浏览器能够请求

在这一点上我完全被难住了,我完全缺乏正则表达式的技能也于事无补

以下是我努力实现的目标: -我有多个NSString,其中包含我从在线网站下载的博客文章中的文本(和链接)。 -我正在使用UIWebView和一个动态创建的HTML页面,这样我就可以有内联图像、视频等。 -博客帖子包含两种类型的YouTube链接:

有两种不同类型的URL,因为博客使用Wordpress,Wordpress自动检测YouTube链接,这意味着不需要嵌入。另外,第一种类型的嵌入不起作用,因为它依赖于浏览器能够请求http或https(因此URL中没有它),这显然在UIWebView中不起作用

本质上,我想做的是从这两种类型的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;
NSString*regextravelinks=@“(https?:/)?(www\\)?(youtu\\.be/| youtube\\.com)?(/|/embed/|/v/|/watch\\?v=|/watch\\?。+&v=)([\\w\\]{11})(&.+)?”;
n错误*错误=NULL;
NSRegularExpression*regex=[NSRegularExpression regular expression with pattern:regextrawrinks
选项:nsregularexpressioncase不敏感
错误:&错误];
NSString*modifiedString=[regex StringByReplacingMatcheInstalling:string
选项:0
范围:NSMakeRange(0,[字符串长度])
withTemplate:@“”;
NSLog(@“%@”,modifiedString);
返回修改字符串;

如果有人能为我指出正确的方向,我将不胜感激,特别是使用正则表达式的

假设
/
可以作为url的开始(如您在示例中所示),您可以尝试以下正则表达式:

(?:https?:)?//(?:[^.]*\.)?youtu(?:\.be|be\.com)(?:/|/embed/|/v/|/watch/?\?(?:.+&)?v=)([\w-]{11})

如果您需要,只需从上面用
\\
退出
\

非常感谢您的帮助。它适用于短链接,但不能捕获已包装iframe的较长版本。我想我需要创建两个单独的正则表达式来覆盖这两个
(?:https?:)?//(?:[^.]*\.)?youtu(?:\.be|be\.com)(?:/|/embed/|/v/|/watch/?\?(?:.+&)?v=)([\w-]{11})