正则表达式 - 查找链接的所有匹配项

时间:2013-02-05 01:12:00

标签: php regex

  

可能重复:
  PHP URL to Link with Regex

我正在尝试 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

regexpal.com

上进行测试

1 个答案:

答案 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)