带链接的Preg_replace URL:MIME类型失败

时间:2013-01-18 12:42:58

标签: php regex url preg-replace mime-types

我在php函数中使用以下regexp来用适当的HTML链接替换URL:

return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);

但是当$ s的值为

之类的字符串时
<li>http://www.link.com/something.pdf</li>

函数返回

<li><a href="http://www.link.com/something.pdf</li">http://www.link.com/something.pdf</li></a></li>

有没有人知道如何修改regexp以获得预期的字符串,即

<li><a href="http://www.link.com/something.pdf">http://www.link.com/something.pdf</a></li> ?

不排除'%'引入的网址的替换子字符串,'?'或'&amp;' ?

1 个答案:

答案 0 :(得分:0)

你的rpattern是不够的(捕获所有链接),但无论如何,你可能想要拥有\S+而不是[^\s<>]+,因为前者捕获了所有非空间。

同样适用于[^\.\s]。制作此[^\s<>.]。在字符类中使用时,你不需要需要来转义点,所以我对这个组的添加基本上是大于和小于符号。