我正在尝试 preg_replace
文本块中的所有链接,以便将它们替换为字符串"<< IMAGE >>"
我正在尝试匹配此文本块中的所有链接:
"Here we can see the chupacabra trying to eat http://somesite.com/img/chupacabra.jpg.
look at the the snails somesite.com/img/snails.png"
我正在使用这个正则表达式:
(https?:\/\/)?.*(jpg|png|jpeg|bmp|gif)
但我不能让它只选择确切的链接字符串 我需要的是:
“在这里我们可以看到chupacabra试图吃 http://somesite.com/img/chupacabra.jpg
。
查看蜗牛 somesite.com/img/snails.png
“
答案 0 :(得分:4)
有两个问题 - 第一个*贪婪,所以它匹配方式很多。第二个是。*包含空格,这些空格不在URL中,因此您没有获得正确的URL。
最简单的解决方案是使用\ S匹配除空白之外的所有内容:
(https?:\/\/)?\S*(jpg|png|jpeg|bmp|gif)
更好的方法是使用这个使用?&lt; = for lookbehind
(?<= |^)(https?://)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(/\S*)\.(jpg|png|jpeg|bmp|gif)