Preg_Replace YouTube URL 有或没有开始时间变量
Preg_Replace YouTube URL with or without Start Time Variable
在我网站的 shout/post 区域,我允许用户使用以下正则表达式 post YouTube URL 和 preg_replace。除非 YouTube URL 具有其他变量(例如开始时间),否则此方法有效。我在 Google 和 Whosebug 上对其进行了大量研究,但找不到任何有效的示例。
我也曾尝试 preg_match 提取视频 ID 和开始时间,然后 preg_replace 使用 preg_match 中的变量 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//0.jpg" alt="music" class="img-responsive"><a title="YouTube Video" href="https://www.youtube.com/embed/?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);
改用parse_url()
。
这个函数的$result
,会让你得到$result['path']
和$result['query']
。
然后,您可以使用 explode('&', $qs)
将查询字符串参数与 $result['query']
分开。
最后您可以再次使用循环 & explode('=', $qsp)
,然后 switch()
对每个查询字符串参数执行操作。
在我网站的 shout/post 区域,我允许用户使用以下正则表达式 post YouTube URL 和 preg_replace。除非 YouTube URL 具有其他变量(例如开始时间),否则此方法有效。我在 Google 和 Whosebug 上对其进行了大量研究,但找不到任何有效的示例。
我也曾尝试 preg_match 提取视频 ID 和开始时间,然后 preg_replace 使用 preg_match 中的变量 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//0.jpg" alt="music" class="img-responsive"><a title="YouTube Video" href="https://www.youtube.com/embed/?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);
改用parse_url()
。
这个函数的$result
,会让你得到$result['path']
和$result['query']
。
然后,您可以使用 explode('&', $qs)
将查询字符串参数与 $result['query']
分开。
最后您可以再次使用循环 & explode('=', $qsp)
,然后 switch()
对每个查询字符串参数执行操作。