【发布时间】:2011-04-08 19:10:42
【问题描述】:
我正忙于创建两个正则表达式来过滤来自 youtube 和 vimeo 视频的 id。我已经有了以下表达式;
YouTube: (youtube\.com/)(.*)v=([a-zA-Z0-9-_]+)
Vimeo: vimeo\.com/([0-9]+)$
正如我在下面解释的,有两种类型的 url 与我已经创建的正则表达式匹配。 Vimeo 和 YouTube 的其他几种类型的 url 不包含在表达式中。我最喜欢的是所有这些都可以用两种表达方式来涵盖。一个用于所有 Vimeo 视频,一个用于所有 youtube 视频。我一直在忙于尝试一些不同的表达方式,但到目前为止还没有成功。我仍在努力掌握正则表达式,所以我希望我走在正确的道路上,有人可以帮助我!如果需要更多信息,请告诉我!
VIMEO URL 不匹配:
http://vimeo.com/channels/hd#11384488
http://vimeo.com/groups/brooklynbands/videos/7906210
http://vimeo.com/staffpicks#13561592
YouTube 网址不匹配
http://www.youtube.com/user/username#p/a/u/1/bpJQZm_hkTE
http://www.youtube.com/v/bpJQZm_hkTE
http://youtu.be/bpJQZm_hkTE
网址匹配
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 时,我不需要修改代码。这方面有什么建议吗?
【问题讨论】:
标签: c# asp.net .net regex youtube