作品:
$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<]*?)