我认为这个regex会做得更好:
#\b((?:https?://stackoverflow\.com/)?uploads/(.*?\.(?:jpg|png|gif)))\b#
我简化了你的一点(例如,替换
https:|http:
具有
https?:
[a-zA-Z0-9]+
新代码(注意,我添加了一个额外的图像参考用于测试):
$old = array();
$pattern = "#\b((?:https?://stackoverflow\.com/)?uploads/(.*?\.(?:jpg|png|gif)))\b#";
$text = "orem uploads/xyx.gif ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor rem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor ";
// seatch and get old urls
preg_match_all($pattern, $text, $old);
print_r($old);
输出:
Array
(
[0] => Array
(
[0] => uploads/xyx.gif
[1] => https://stackoverflow.com/uploads/image1.png
[2] => https://stackoverflow.com/uploads/image2.png
)
[1] => Array
(
[0] => uploads/xyx.gif
[1] => https://stackoverflow.com/uploads/image1.png
[2] => https://stackoverflow.com/uploads/image2.png
)
[2] => Array
(
[0] => xyx.gif
[1] => image1.png
[2] => image2.png
)
)
如果要坚持图像名称只包含
[a-zA-Z0-9]
然后改变
.*?
到
即
$pattern = "#\b((?:https?://stackoverflow\.com/)?uploads/([a-zA-Z0-9]+\.(?:jpg|png|gif)))\b#";