我想替换图像标签上的所有图像链接,但我不知道我做错了什么。
这是我的正则表达式:
/(http:\/\/.+(png|jpeg|jpg|gif|bmp))/i
但是当我将它与字符串一起使用时:
http://re-actor.net/uploads/posts/2009-08/1249921580_toyota-ft-hs.png and http://re-actor.net/uploads/posts/2009-08/thumbs/1249922220_toyota_ft-hs-14.jpg
结果是
<img src="http://re-actor.net/uploads/posts/2009-08/1249921580_toyota-ft-hs.png and http://re-actor.net/uploads/posts/2009-08/thumbs/1249922220_toyota_ft-hs-14.jpg" />
(两个链接一个图像标签)
如何解决?
这是因为你的正则表达式必须是不贪婪的。只需在正则表达式末尾添加 U 标志即可:
/(http:\/\/.+(png|jpeg|jpg|gif|bmp))/Ui
它有效!
您的
.+
太匹配了。您需要使用 .+?
使其尽可能少地匹配。
现在,您可能会遇到包含字符串的图像的一些问题,例如,
gif
(例如,在example.com/gift.png
中,只有example.com/gif
会匹配)...但这可以通过在表达式后缀\b
来部分解决
(断字)或 \s
(空格)。您必须进行试验,看看什么对您的数据有效。
使用非贪婪匹配:
/(http:\/\/.+?(png|jpeg|jpg|gif|bmp))/i
.+?
仅匹配第一个 (png|jpg|...