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)
提前致谢.
一个问题是你的表达式期望地址周围的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)