0

可能重复:
与正则表达式链接的 PHP URL

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

但我不能让它只选择确切的链接字符串。
我需要的是这个:

“在这里我们可以看到卓柏卡布拉试图吃东西 http://somesite.com/img/chupacabra.jpg看看蜗牛 somesite.com/img/snails.png

regexpal.com上进行测试

4

1 回答 1

4

有两个问题 - 首先 * ist 贪婪,所以它匹配的方式很多。第二个是, .* 包含空格,这些空格不在 URL 中,因此您无法获得正确的 URL。

最简单的解决方案是使用 \S 匹配除空格以外的所有内容:

(https?:\/\/)?\S*(jpg|png|jpeg|bmp|gif)

更好的方法是使用这个使用 ?<= 的lookbehind

(?<= |^)(https?://)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(/\S*)\.(jpg|png|jpeg|bmp|gif)
于 2013-02-05T01:14:31.950 回答