改进这个正则表达式以使用短划线( - )来考虑youtube id

时间:2013-10-26 06:02:14

标签: regex

如何改进此正则表达式以适应包含-的youtube ID? 我已经测试了其他线程中发现的几个正则表达式,但他们没有在id中考虑-

youtube链接有时会非常复杂。

$url = 'http://www.youtube.com/watch?v=iol0B-clFFM"; //valid youtube link
$pattern = "/(?<=(?:v|i)=)[a-zA-Z0-9-]+(?=&)|(?<=(?:v|i)\/)[^&\n]+|(?<=embed\/)[^\"&\n]+|(?<=(?:v|i)=)[^&\n]+|(?<=youtu.be\/)[^&\n]+/";

preg_match($pattern,$url,$matches);

echo $matches[0];

上面的结果仅返回iol0B,它会在-

之前停止

1 个答案:

答案 0 :(得分:1)

你的模式有效,但也许你可以缩短它:

$pattern = '~(?<=[vi][=/]|youtu\.be/|embed/)[a-z0-9-]+~i';