Я использую 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;
выходы http://www.youtube.com/watch?v=Bf3iBtURGxk [не работал вообще]
$final = preg_replace($pattern, $replacement, 'https://www.youtube.com/watch?v=Bf3iBtURGxk');
echo $final;
выходы http://www.youtube.com/v/Bf3iBtURGx [работает! но усекает последний символ!]
$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;
Окружение персонажа с (..)
не делает это необязательным. Вот почему первый год с http
Протокол не соответствует. присоединять ?
сделать его необязательным:
http(s) -> http(s)?
После v=
пришёл алфавит и цифры. Ты можешь использовать \w
чтобы соответствовать алфавиту, цифры (\w
также соответствует _
, но не большая проблема для этого случая)
$pattern = '#http(s)?://(www\.)?youtube\.com/watch\?v=(\w+)#i';