Я все еще изучаю PHP и никогда не касался regex или preg_replace до сегодняшнего дня, поэтому, пожалуйста, прости мое невежество. Я модифицирую скрипт для моих форумов, чтобы конвертировать ссылки YouTube в сообщениях для встраивания кода. До сих пор, если строка содержит только одну ссылку, она работает, но когда у меня несколько ссылок в нескольких сообщениях, это не так. Кроме того, я не уверен, как заполняется переменная $ text, потому что она не просто строка и содержит все статусные сообщения для пользователя в одной переменной, которая передается другим функциям. Любая помощь очень ценится.
Это выглядит как одна строка:
echo "$text";
https://www.youtube.com/watch?v=3rb47k3KHtQtesttesthttps://www.youtube.com/watch?v=ah2rSAdZljMhttps://www.youtube.com/watch?v=ah2rSAdZljM
Но на самом деле это несколько строк в одной переменной. Это меня смущает, так как я не знаю, как это сделать без массивов, и я бы очень хотел знать.
var_dump($text);
string(43) "https://www.youtube.com/watch?v=3rb47k3KHtQ" string(4) "test" string(4) "test" string(43) "https://www.youtube.com/watch?v=ah2rSAdZljM" string(43) "https://www.youtube.com/watch?v=ah2rSAdZljM"
PHP-код:
<?php
$search = '/(https:\/\/www\.youtube\.com\/watch.v=[a-z0-9]{8,11})/i';
$replace = '<iframe width="560" height="315" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen src="https://www.youtube.com/embed/';
$replace .= $1;
$replace .= '"></iframe>';
echo preg_replace($search, $replace, $text);
?>
С $ 1 скрипт не будет работать, если я не укоротю текст, чтобы удалить все остальные ссылки. Мне нужно иметь возможность заменить все ссылки, но я не знаю, как получить доступ к группам регулярных выражений, за исключением стандартных $ 1, $ 2, $ 3 и т. Д. Из учебных пособий, за которыми я следовал. Возможно ли то, что я пытаюсь сделать?
Ваш код работает для меня, если я изменю это
$replace .= $1;
к этому
$replace .= "\$1";
Других решений пока нет …