我徹底難倒就這一個,和我的完全缺乏技能的使用正則表達式沒有幫助。的YouTube視頻ID匹配和更換
這是我想要實現的: - 我有多個NSString包含我從一個網站在線下載的博客帖子的文本(和鏈接)。 - 我使用一個HTML頁面我即時創建一個UIWebView,這樣我可以有內嵌圖片,視頻等 - 博客文章包含兩種類型的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,這顯然是在UIWebViews中不起作用(因此在URL中有它的不足)。
從本質上講就是我想要做的就是找到這兩種類型的URL的視頻ID,然後採取現有的URL出的NSString的並用正確的嵌入型附有正確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;
我將非常感激,如果任何人都可以在正確的方向指向我,特別是與正則表達式的
非常感謝你的幫助。它適用於短鏈接,但不會捕獲已包裝iframe的較長版本。我想我需要創建兩個單獨的正則表達式來覆蓋這兩個 – tizaks