Завернуть ссылки c изображениями на свой файл

207
03 марта 2018, 21:31

Работает:

$str = "http://element-bmw.ru/wp-content/uploads/2017/01/323e33885d8518e1eddecde0a54a18b7-702x336.jpg <br> http://element-bmw.ru/wp-content/uploads/2017/01/auto_parts_volkswagen_golf_3-768x450.jpg";
$str2 = preg_replace('/http:\/\/(.*?)\.(jpg|jpeg|png|gif|bmp)/i','//site.ru/misc/img.php?url=http://$1.$2',$str);
echo '<pre>'.print_r([$str,$str2],TRUE).'</pre>';

Не работает:

$str = "http://rambler.ru <br> http://element-bmw.ru/wp-content/uploads/2017/01/323e33885d8518e1eddecde0a54a18b7-702x336.jpg <br> http://element-bmw.ru/wp-content/uploads/2017/01/auto_parts_volkswagen_golf_3-768x450.jpg";
$str2 = preg_replace('/http:\/\/(.*?)\.(jpg|jpeg|png|gif|bmp)/i','//site.ru/misc/img.php?url=http://$1.$2',$str);
echo '<pre>'.print_r([$str,$str2],TRUE).'</pre>';

С регулярками на вы, рассчитываю на вашу помощь.

Answer 1

Очевидно, выражение /http:\/\/(.*?)\.(jpg|jpeg|png|gif|bmp)/i будет соответствовать строке начиная от первого вхождения http и до первого попавшегося (jpg|jpeg|....). Вызвано это тем, что используется маска (.*?), что соответствует любому символу.

В вашем же случае (в приведенном), поскольку ссылки, видимо разделены пробелами, то надо их исключить, из всех символов, то есть использовать, например (\S*?) либо, если в разделителе будет тэг, то можно угловую скобку тоже исключить ([^\s<]*?)

READ ALSO
Как реализовать умный поиск в строке?

Как реализовать умный поиск в строке?

Подскажите, можно ли как-то осуществить умный поиск в строке?

198
Как сделать проверку даты?

Как сделать проверку даты?

Доброго времени суток, у меня вопрос: есть таблица:

190
PDO PHP, подготовленный запрос и регулярные выражения

PDO PHP, подготовленный запрос и регулярные выражения

передаю в функцию параметр и хочу использовать его в регулярном выражении, но этот код не работает и не выдает ошибокEсли вместо ':code%' пишу...

189