Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Regex preg_replace将youtube URL转换为嵌入URL版本_Php_Regex_Preg Replace - Fatal编程技术网

PHP Regex preg_replace将youtube URL转换为嵌入URL版本

PHP Regex preg_replace将youtube URL转换为嵌入URL版本,php,regex,preg-replace,Php,Regex,Preg Replace,我使用的preg_replace如下所示,但存在以下问题: $pattern = '#http(s)://(www\.)?youtube\.com/watch\?v=([^ &\n]+)(&.*?(\n|\s))?.+#i'; $replacement = 'http://www.youtube.com/v/$3'; $final = preg_replace($pattern, $replacement, 'http://www.youtube.com/watch?v=Bf3i

我使用的preg_replace如下所示,但存在以下问题:

$pattern = '#http(s)://(www\.)?youtube\.com/watch\?v=([^ &\n]+)(&.*?(\n|\s))?.+#i';
$replacement = 'http://www.youtube.com/v/$3';
$final = preg_replace($pattern, $replacement, 'http://www.youtube.com/watch?v=Bf3iBtURGxk');

echo $final; 
输出[根本不起作用]

$final = preg_replace($pattern, $replacement, 'https://www.youtube.com/watch?v=Bf3iBtURGxk');

echo $final; 

输出[工作!但截断最后一个字符!]

用..环绕字符。。不使其成为可选的。这就是为什么第一个yrl与http协议不匹配。追加要使其可选,请执行以下操作:

http(s) -> http(s)?
v=cames之后是字母和数字。您可以使用\w来匹配字母表,数字\w也可以匹配u,但这不是一个大问题

$pattern = '#http(s)?://(www\.)?youtube\.com/watch\?v=(\w+)#i';
$pattern = '#https?://(?:www\.)?youtube\.com/watch\?v=([0-9a-z]+)#i';
$replacement = 'http://www.youtube.com/v/$1';
$final = preg_replace($pattern, $replacement, 'http://www.youtube.com/watch?v=Bf3iBtURGxk'); 
echo $final;