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]+)