Как найти строку и выделить ее до конца (неизвестно) в php - PullRequest
1 голос
/ 16 января 2020

Мне нужно найти и выбрать все ссылки на YouTube в тексте с php, чтобы заменить их соответствующим кодом для встраивания, но я, похоже, не могу найти способ.

1- Где начало ссылки:
Начало ссылки может измениться между https://www.youtube.com/watch?v=<video_id> и https://youtu.be/<video_id>, и я думаю, что strpos() справится с этой задачей, проблема в том. ...

2- Где она заканчивается:
К ссылке может быть (или нет) строка запроса, что делает ее длину неизвестной, поэтому единственный способ - выбрать между https://www.youtube.co.... или https://youtu.b... и следующий пробел, который будет концом ссылки.

Мне нужно заменить ссылку на соответствующий код для вставки YouTube.

Есть идеи, как выбрать ссылку?

1 Ответ

1 голос
/ 16 января 2020

Попробуйте это регулярное выражение

(https:\/\/www\.youtube\.com\/.*?)(?:\s|$)|(https:\/\/youtu\.be\/.*?)(?:\s|$)

пример

Использование:

$re = '/(https:\/\/www\.youtube\.com\/.*?)(?:\s|$)|(https:\/\/youtu\.be\/.*?)(?:\s|$)/';
$str = 'abc https://www.youtube.com/watch?v=Dx5qFachd3A def https://youtu.be/Dx5qFachd3A ghi';
$embedStart = '<iframe width="560" height="315" src="';
$embedEnd = '" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

$str = preg_replace($re,$embedStart.'$0'.$embedEnd,$str);

echo $str;

Вы можете использовать preg_replace для замените его вашим кодом для вставки.

...