相关疑难解决方法(0)

C#regex通过url从youtube和vimeo获取视频ID

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

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

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

VIMEO网址不匹配:

http://vimeo.com/channels/hd#11384488
http://vimeo.com/groups/brooklynbands/videos/7906210
http://vimeo.com/staffpicks#13561592
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

匹配的网址

http://www.youtube.com/watch?v=bWTyFIYPtYU&feature=popular
http://vimeo.com/834881
Run Code Online (Sandbox Code Playgroud)

我们的想法是将上面提到的所有网址与两个正则表达式相匹配.一个用于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);
Run Code Online (Sandbox Code Playgroud)

在我的代码中

var youtubeMatch = url.match(YoutubeVideoRegex );
var vimeoMatch = url.match(VimeoVideoRegex );

var youtubeIndex = (youtubeMatch.length - 1)
var youtubeId = youtubeMatch[youtubeIndex];
Run Code Online (Sandbox Code Playgroud)

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

.net c# regex youtube asp.net

26
推荐指数
1
解决办法
3万
查看次数

标签 统计

.net ×1

asp.net ×1

c# ×1

regex ×1

youtube ×1