1 回答

TA贡献1780条经验 获得超1个赞
您不能像在 中那样 OR 正则表达式模式preg_match($rx1 || $rx2, $text),您应该使用单个正则表达式和|分隔选项。但是,这里可能会变得太棘手,因为您需要捕获特定的组。您可以使用分支重置组((?|...|...)其中替代项保留分组 ID)或\K运算符(省略到目前为止匹配的文本):
'~(?|(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})|vimeo\.com/(?:[a-z]+/)*([0-9]{6,11}))~'
请参阅正则表达式演示。或与\K:
'~(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)\K[^"&?/ ]{11}|vimeo\.com/(?:[a-z]+/)*\K[0-9]{6,11}~'
查看另一个正则表达式演示
PHP代码:
$rx = '~(?|(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})|vimeo\.com/(?:[a-z]+/)*([0-9]{6,11}))~';
$s = 'https://vimeo.com/341989332 or https://www.youtube.com/watch?v=eUMbH6X_Adc';
if (preg_match_all($rx, $s, $m)) {
print_r($m[1]);
}
// => Array ( [0] => 341989332 [1] => eUMbH6X_Adc )
- 1 回答
- 0 关注
- 136 浏览
添加回答
举报