2014-02-27 6 views
0

나는이 문제를 완전히 해결하지 못했고 정규 표현식에 대한 기술이 부족하여 도움이되지 않습니다.YouTube videoID 일치 및 바꾸기

다음은 내가 달성하고자하는 것입니다. - 온라인 사이트에서 다운로드 한 블로그 게시물의 텍스트 및 링크가 포함 된 NSString을 여러 개 가지고 있습니다. - 내가 인라인 이미지를 가질 수 있도록 나는 즉석에서 만들 수있는 HTML 페이지와있는 UIWebView를 사용하고, 등 비디오 - <iframe src="//www.youtube.com/embed/VIDEOID" height="405" width="720" allowfullscreen="" frameborder="0"></iframe>

http://youtu.be/VIDEOID 
- 블로그 게시물 YouTube 링크의 두 가지 유형을 포함

블로그에는 Wordpress를 사용하고 Wordpress에는 YouTube 링크에 대한 자동 감지 기능이있어 삽입물이 필요하지 않으므로 두 가지 유형의 URL이 있습니다. 또한 embed의 첫 번째 유형은 브라우저가 http 또는 https를 요청할 수 있기 때문에 작동하지 않습니다. 따라서 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

(당신이 당신의 예에 표시된대로),이 정규식 시도 할 수있는 URL의 시작이 될 수 // 가정 :

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

그냥 탈출 \\\이 필요합니다.

+0

도움을 주셔서 대단히 감사합니다. 그것은 짧은 링크를 위해 잘 작동하지만, 이미 싸서 iframe과 긴 버전을 캡처하지 않습니다. 두 가지 별도의 정규식을 작성하여 두 가지를 모두 처리해야한다고 생각합니다. – tizaks