Работает:
$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>';
С регулярками на вы, рассчитываю на вашу помощь.
Очевидно, выражение /http:\/\/(.*?)\.(jpg|jpeg|png|gif|bmp)/i будет соответствовать строке начиная от первого вхождения http и до первого попавшегося (jpg|jpeg|....). Вызвано это тем, что используется маска (.*?), что соответствует любому символу.
В вашем же случае (в приведенном), поскольку ссылки, видимо разделены пробелами, то надо их исключить, из всех символов, то есть использовать, например (\S*?) либо, если в разделителе будет тэг, то можно угловую скобку тоже исключить ([^\s<]*?)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости