正则表达式不是单引号或双引号

时间:2011-07-22 15:43:20

标签: php regex

我一直在使用此正则表达式将单个文本链接转换为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>

1 个答案:

答案 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}....(?!["'])/', ...)