为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
德玛西亚99 2022-01-08 17:25:33
我有一个可以嵌入 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任何的想法 ?提前致谢
查看完整描述

1 回答

?
慕神8447489

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 )


查看完整回答
反对 回复 2022-01-08
  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号