PHP找到YouTube网址以嵌入_match和_replace

时间:2019-06-17 16:58:36

标签: php regex preg-replace preg-match

无法弄清楚以下代码为何不起作用。

它需要文本文件内容(字符串),替换youtube url(来自字符串),然后将其嵌入其他字符串,但是我没有任何反应。

// regex
$yt_pre = "/https?:\/\/(?:www)?\.youtu(?:\.be|be\.com)\/watch(?:\?(.*?)&|\?)v=([a-zA-Z0-9_\-]+)(\S*)/i";

// find
preg_match($yt_pre, $text, $yt_find);
$yt_loc = $yt_find[1];

// embed
$yt_rep = "<div class='youtube'><iframe src='https://www.youtube.com/embed/" . $yt_loc . "' frameborder='0' allowfullscreen class='youtube_iframe'></iframe></div>";

// replace
preg_replace($yt_pre, $yt_rep, $text);

1 个答案:

答案 0 :(得分:0)

我的猜测是,该表达式可能适用于youtube链接,我已经假定我们使用具有此模式(([A-Za-z0-9_-]{11}))的ID:

https?:\/\/(?:www\.)?youtu(?:be)?(?:\.com|\.be)\/(?:watch\?v=|embed\/watch\?feature=player_embedded&v=)?([A-Za-z0-9_-]{11})(.+)?

Demo

$re = '/https?:\/\/(?:www\.)?youtu(?:be)?(?:\.com|\.be)\/(?:watch\?v=|embed\/watch\?feature=player_embedded&v=)?([A-Za-z0-9_-]{11})(.+)?/m';
$str = 'http://www.youtube.com/watch?v=iwGFalTRHDA
http://www.youtube.com/watch?v=iwGFalTRHDA&feature=related
http://youtu.be/iwGFalTRHDA
http://youtu.be/n17B_uFF4cA
http://www.youtube.com/embed/watch?feature=player_embedded&v=r5nB9u4jjy4
http://www.youtube.com/watch?v=t-ZRX8984sc
http://youtu.be/t-ZRX8984sc';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

var_dump($matches);

Ref