我发现此代码(Swap all youtube urls to embed via preg_replace())将youtube网址(http://www.youtube.com/watch?v=CfDQ92vOfdc或http://www.youtube.com/v/CfDQ92vOfdc)换成youtube embed网址(http://www.youtube.com/embed/CfDQ92vOfdc),但似乎没有工作?有任何想法吗?我对正则表达不太了解。
以下是代码:
$string = 'http://www.youtube.com/watch?v=CfDQ92vOfdc';
$search = '#<a (?:.*?)href=["\\\']http[s]?:\/\/(?:[^\.]+\.)*youtube\.com\/(?:v\/|watch\?(?:.*?\&)?v=|embed\/)([\w\-\_]+)["\\\']#ixs';
$replace = 'http://www.youtube.com/embed/$2';
$url = preg_replace($search,$replace,$string);
但它仍然显示为:
http://www.youtube.com/watch?v=CfDQ92vOfdc
而不是:
http://www.youtube.com/embed/CfDQ92vOfdc
提前致谢。
答案 0 :(得分:7)
一个问题是你的表达式期望地址周围的a-href标记。 另一个问题是你的$ replace字符串使用单引号,它不会解析$ 2。
这个更简单的表达式应该有效:
$string = 'http://www.youtube.com/watch?v=CfDQ92vOfdc';
$search = '/youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi';
$replace = "youtube.com/embed/$1";
$url = preg_replace($search,$replace,$string);
echo $url;
答案 1 :(得分:5)
更改
$string = 'http://www.youtube.com/watch?v=CfDQ92vOfdc';
到
$string = '<a href="http://www.youtube.com/watch?v=CfDQ92vOfdc" ></a>';
或强>
$search = '#<a (?:.*?)href=["\\\']http[s]?:\/\/(?:[^\.]+\.)*youtube\.com\/(?:v\/|watch\?(?:.*?\&)?v=|embed\/)([\w\-\_]+)["\\\']#ixs';
到
$search = '#(.*?)(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch?.*?v=))([\w\-]{10,12}).*#x';
答案 2 :(得分:0)
这是我写的一个函数,你回应出结果:
function youtube_url_to_embed($youtube_url) {
$search = '/youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi';
$replace = "youtube.com/embed/$1";
$embed_url = preg_replace($search,$replace,$youtube_url);
return $embed_url;
}