结合两个 preg match 从 url 获取 viemo id 和 youtube id

我有一个可以嵌入 vimeo 视频或 youtube 视频的客户端。所以我想写一个从 url 获取 id 的正则表达式。


这就是我所做的:


 $y = '%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i';

 $v = '(https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/([a-z]*\/)*([0-9]{6,11})[?]?.*';

 preg_match(($y) | ($v), $markup, $match);

 $markup = preg_replace('#\<iframe(.*?)\ssrc\=\"(.*?)\"(.*?)\>#i', '<iframe$1 src="$2&loop=1&amp;playlist='.$match[1].'"$3>', $markup);

但它给了我一个错误:


Warning: preg_match(): Unknown modifier '|' in

任何的想法 ?提前致谢


德玛西亚99
浏览 137回答 1
1回答

慕神8447489

您不能像在 中那样 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)) {&nbsp; &nbsp; print_r($m[1]);}// => Array ( [0] => 341989332&nbsp; &nbsp; [1] => eUMbH6X_Adc )
打开App,查看更多内容
随时随地看视频慕课网APP