preg_replace - 仅在空格包围时匹配

时间:2011-08-05 03:52:10

标签: php regex preg-replace

这是我现有的代码:

preg_replace("!((([a-z]{3,5}://))". "[-a-z0-9.]{2,}\.[a-z]{2,4}". "(:[0-9]+)?". "(/([^\s]*[^\s,.])?)?". "(\?([^\s]*[^\s,.])?)?)!i",  "<a target=\"_blank\" href=\"\\1\">\\1</a>", $s);

它需要一个链接并将其转换为HTML。

问题是,有时我会得到一个我不想变成HTML的URL。例如:

<img src="http://www.domain.com/img.png" />

这样会变成:

<img src="<a target="_blank" href ...

防止这种情况的最佳方法是什么?我认为只在一个空间之间进行链接可能效果很好。我该如何改变preg_replace?

1 个答案:

答案 0 :(得分:2)

您可以使用word boundaries\b)。

preg_replace("!\b((([a-z]{3,5}://))". "[-a-z0-9.]{2,}\.[a-z]{2,4}". "(:[0-9]+)?". "(/([^\s]*[^\s,.])?)?". "(\?([^\s]*[^\s,.])?)?)\b!i",  "<a target=\"_blank\" href=\"\\1\">\\1</a>", $s);

虽然我的首选技术是仅在文本节点中搜索,因此您不必处理序列化HTML。

如果您决定解析HTML,DOMDocument非常方便。