使用或不使用“开始时间变量”的Preg_Replace YouTube网址

时间:2016-07-20 18:16:06

标签: php regex youtube preg-replace preg-match

在我网站的喊叫/发布区域,我允许用户使用以下正则表达式和preg_replace发布YouTube网址。除非YouTube网址包含其他变量,例如开始时间,否则此功能无效。我在Google和StackOverflow上对此进行了大量研究,但无法找到任何有效的例子。

我也试过preg_match同时提取视频ID和开始时间,然后使用preg_match中的变量preg_replace该URL,但是也没有成功。

带开始时间的视频示例如下: https://youtu.be/PZb9T-eTOcg?t=2m8s

我的代码中的正则表达式会在替换之前从URL中提取PZb9T-eTOcg?t = 2m8s。

感谢您的帮助!

        $text = preg_replace('#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#','<br /><div class="cover overlay hover" style="height: 240px;"><img src="https://img.youtube.com/vi/$1/0.jpg" alt="music" class="img-responsive"><a title="YouTube Video" href="https://www.youtube.com/embed/$1?autoplay=1" class="overlay overlay-full overlay-hover overlay-bg-black video" style="height: 240px;"><span class="v-center"><span class="btn btn-lg btn-circle btn-white"><i class="fa fa-play"></i></span></span></a></div>', $text);

1 个答案:

答案 0 :(得分:0)

改为使用parse_url()

此功能的$result将允许您获取$result['path']$result['query']

然后,您可以使用explode('&', $qs)将查询字符串参数与$result['query']分开。

最后你可以使用循环和放大器再次explode('=', $qsp),然后switch()为每个查询字符串参数执行操作。