我一直在使用此正则表达式将单个文本链接转换为Html链接。它适用于纯文本,但每当有人插入正确的html链接或iframe或使用http://先前文本的任何内容时,它都会使其成为链接。解释:
preg_replace('/([hf][tps]{2,4}:\/\/[^ \t\n\r]+[^ .\t,\n\r\(\)"\'])/', '<a href="$1">$1</a>', $string)
完成了这项工作,但它已经毁了:
<a href='...'>...
,<iframe src='...'>...
以及其他每一个混乱。
我一直在尝试使用:
^[^'"]*([hf][tps]{2,4}:\/\/[^ \t\n\r]+[^ .\t,\n\r\(\)"\'])$
但它确实:
juanito mario http://...
成为
<a href="juanito mario http://...">juanito mario http://...</a>
答案 0 :(得分:0)
使用负向lookbehind和lookahead断言,请参阅
http://www.php.net/manual/en/regexp.reference.assertions.php
举: (?&lt;!foo)bar确实发现“bar”的出现,其前面没有“foo”。 foo(?!bar)匹配任何未出现“bar”的“foo”。
所以在你的情况下像
preg_replace('/(?<!["'])([hf][tps]{2,4}....(?!["'])/', ...)