更改youtube网址在php中嵌入网址

Sou*_*aby 3 php regex youtube preg-replace

我发现此代码(通过preg_replace()交换所有youtube网址以交换youtube网址(http://www.youtube.com/watch?v=CfDQ92vOfdc,或http://www.youtube.com/v/ CfDQ92vOfdc)进入youtube嵌入网址(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);
Run Code Online (Sandbox Code Playgroud)

但它仍然显示为:

http://www.youtube.com/watch?v=CfDQ92vOfdc
Run Code Online (Sandbox Code Playgroud)

代替:

http://www.youtube.com/embed/CfDQ92vOfdc
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Cla*_*ell 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;
Run Code Online (Sandbox Code Playgroud)


小智 6

要么改变

$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'; 
Run Code Online (Sandbox Code Playgroud)

$search     = '#(.*?)(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch?.*?v=))([\w\-]{10,12}).*#x';
Run Code Online (Sandbox Code Playgroud)