PHP Regex preg_replace для преобразования URL-адреса YouTube для вставки версии URL

Я использую 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 [работает! но усекает последний символ!]

0

Решение

$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;

демонстрация

0

Другие решения

Окружение персонажа с (..) не делает это необязательным. Вот почему первый год с http Протокол не соответствует. присоединять ? сделать его необязательным:

http(s) -> http(s)?

После v= пришёл алфавит и цифры. Ты можешь использовать \w чтобы соответствовать алфавиту, цифры (\w также соответствует _, но не большая проблема для этого случая)

$pattern = '#http(s)?://(www\.)?youtube\.com/watch\?v=(\w+)#i';
0

По вопросам рекламы [email protected]