虽然此处已多次提出类似问题,但我已经要求修改现有的正则表达式行以改进它。很确定这也可以帮助处于相同情况的其他人。
我想要达到的目的是使用 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不支持它。
答案 0 :(得分:4)
(?<=http:\/\/)(?:www\.)?youtu(?:be\.com\/(?:watch\?|user\/|v\/|embed\/)\S+|\.be\/\S+)
请参阅 this demo 。