ColdFusion正则表达式匹配有效的Youtube链接(需要改进)

时间:2013-11-29 16:00:41

标签: regex coldfusion youtube

虽然此处已多次提出类似问题,但我已经要求修改现有的正则表达式行以改进它。很确定这也可以帮助处于相同情况的其他人。

我想要达到的目的是使用 ColdFusion 正则表达式匹配有效的YouTube视频网址。

这是我目前得到的:

ReMatch('^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^##\&\?]*).*',mylink)

这适用于以下网址类型:

http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index
http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o
http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0
http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s
http://www.youtube.com/embed/0zM3nApSvMg?rel=0
http://www.youtube.com/watch?v=0zM3nApSvMg
http://youtu.be/0zM3nApSvMg

但是,无论出于何种原因,以下网址也会匹配:

http://www.theguardian.com/media/2013/nov/29/russell-brand-rages-sun-rupert-murdoch

如何修改代码更准确?也许确保'youtu'部分对链接至关重要会有所帮助,因为我认为当前正则表达式只将它作为可选部分之一?麻烦的是我自己无法修改此代码,因此请求帮助。

////// EDITED ////////////////

感谢Omega在下面的回答,稍微修改一下这个模式对我的案例有用:

ReMatch('(http:\/\/)(?:www\.)?youtu(?:be\.com\/(?:watch\?|user\/|v\/|embed\/)\S+|\.be\/\S+)',mylink)

另外,值得注意的是我必须从建议的模式中删除lookbehind部分,因为ColdFusion不支持它。

1 个答案:

答案 0 :(得分:4)

(?<=http:\/\/)(?:www\.)?youtu(?:be\.com\/(?:watch\?|user\/|v\/|embed\/)\S+|\.be\/\S+)

请参阅 this demo

Regular expression visualization