我在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;' ?
答案 0 :(得分:0)
你的rpattern是不够的(捕获所有链接),但无论如何,你可能想要拥有\S+
而不是[^\s<>]+
,因为前者捕获了所有非空间。
同样适用于[^\.\s]
。制作此[^\s<>.]
。在字符类中使用时,你不需要需要来转义点,所以我对这个组的添加基本上是大于和小于符号。