C#正则表达式从youtube和vimeo获取videoID由url

我正忙着创建两个正则表达式来过滤来自youtube和vimeovideo的id。 我已经有了以下表达式;

YouTube: (youtube\.com/)(.*)v=([a-zA-Z0-9-_]+) Vimeo: vimeo\.com/([0-9]+)$ 

正如我在下面解释的那样,有两种类型的url与我已经创建的正则表达式匹配。 来自Vimeo和YouTube的其他几种url并未被表达所覆盖。 我最喜欢的是所有这些都可以用两个表达式来涵盖。 一个适用于所有Vimeovideo,一个适用于所有YouTubevideo。 我一直在忙着尝试一些不同的表达方式,但到目前为止还没有成功。 我还在努力掌握正则表达式,所以我希望我能以正确的方式来帮助我! 如果需要更多信息,请告诉我!

VIMEOurl不匹配:

 http://vimeo.com/channels/hd#11384488 http://vimeo.com/groups/brooklynbands/videos/7906210 http://vimeo.com/staffpicks#13561592 

YOUTUBEurl不匹配

 http://www.youtube.com/user/username#p/a/u/1/bpJQZm_hkTE http://www.youtube.com/v/bpJQZm_hkTE http://youtu.be/bpJQZm_hkTE 

匹配的url

 http://www.youtube.com/watch?v=bWTyFIYPtYU&feature=popular http://vimeo.com/834881 

我们的想法是将上面提到的所有url与两个正则表达式相匹配。 一个用于vimeo,一个用于youtube。

在回答后更新Sedith:

这就是我的表达式现在的样子

 public static readonly Regex VimeoVideoRegex = new Regex(@"vimeo\.com/(?:.*#|.*/videos/)?([0-9]+)", RegexOptions.IgnoreCase | RegexOptions.Multiline); public static readonly Regex YoutubeVideoRegex = new Regex(@"youtu(?:\.be|be\.com)/(?:(.*)v(/|=)|(.*/)?)([a-zA-Z0-9-_]+)", RegexOptions.IgnoreCase); 

在我的代码中

 var youtubeMatch = url.match(YoutubeVideoRegex ); var vimeoMatch = url.match(VimeoVideoRegex ); var youtubeIndex = (youtubeMatch.length - 1) var youtubeId = youtubeMatch[youtubeIndex]; 

正如您所看到的,我现在需要找到videoId在数组中的索引,其中正则表达式返回了匹配项。 但我希望它只返回id本身,所以我不需要修改代码,当vimeo的youtube决定改变那里的URL。 关于这个的任何提示?

我玩了一些例子并想出了这些:

 Youtube: youtu(?:\.be|be\.com)/(?:.*v(?:/|=)|(?:.*/)?)([a-zA-Z0-9-_]+) Vimeo: vimeo\.com/(?:.*#|.*/videos/)?([0-9]+) 

他们应该匹配所有给定的。 (?:…)表示不会捕获括号内的所有内容。 所以只能获得id。

我自己也是一个正则表达式的新手,所以如果有人来这里尖叫不要听我的话也不要感到惊讶,但希望这些都会有所帮助。

我发现这个网站在制定模式时非常有用: http : //www.regexpal.com/

编辑:

得到这样的身份:

 string url = ""; //url goes here! Match youtubeMatch = YoutubeVideoRegex.Match(url); Match vimeoMatch = VimeoVideoRegex.Match(url); string id = string.Empty; if (youtubeMatch.Success) id = youtubeMatch.Groups[1].Value; if (vimeoMatch.Success) id = vimeoMatch.Groups[1].Value; 

这适用于普通的旧c#.net,不能担保asp.net

如果您正在使用视图模型编写一些应用程序(例如ASP.NET MVC):

 public string YouTubeUrl { get; set; } public string YouTubeVideoId { get { var youtubeMatch = new Regex(@"youtu(?:\.be|be\.com)/(?:.*v(?:/|=)|(?:.*/)?)([a-zA-Z0-9-_]+)") .Match(this.YouTubeUrl); return youtubeMatch.Success ? youtubeMatch.Groups[1].Value : string.Empty; } } 

Vimeo的:

 vimeo\.com/(?:.*#|.*/)?([0-9]+)