Regex 改进这个正则表达式来考虑YouTube ID与DASH(-)

Regex 改进这个正则表达式来考虑YouTube ID与DASH(-),regex,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\/

如何改进此正则表达式以适应包含
-
的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];
$url='1!'http://www.youtube.com/watch?v=iol0B-clFFM;//有效的youtube链接

$pattern=“/(?您的模式有效,但您可以将其缩短:

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

$pattern='~(?对我有效?看这里真的!?好吧,这太奇怪了,我已经试过很多次了。让我再检查一下。感谢您的确认。请注意,
\u
也是youtube链接的有效字符。只需使用
[\w\d-]
如果您的口味支持的话。Youtube ID基本上是base64编码的二进制数字,带有
-
,而不是
+
/
可能的重复