【发布时间】:2011-09-04 08:28:31
【问题描述】:
我目前在循环中有以下代码:
$message = preg_replace("/({$data[0]})/i","<a href=\"{$data[1]}\" class=\"postlink\">$1</a>",$message,1);
这个循环的目的是寻找特定的关键字 ($data[0]) 并将它们转换为指向 $data[1] 中 URL 的链接。我也使用 1 的限制。
这在某种程度上可以正常工作。但是,我正在尝试改进此正则表达式以防止出现以下问题:
- 如果 URL 实际上包含标记的关键字,事情就会变得一团糟。例如,如果“test”是一个关键字,并且页面有一个指向“http://www.site.com/test.html”之类的 URL 的链接,那么它将替换“test.html”,这是错误的。它应该忽略它。
- 如果文本已经包含类似
<a href="blabla">this is a test</a>的内容,我不希望替换关键字“test”,因为它已经是链接的一部分。
这是我目前发现的两个主要问题,可能还有更多。我正在寻求帮助编写更好的正则表达式来避免这些问题。
谢谢
【问题讨论】:
-
对于第一个问题,探测周围的空白。上下文相关的正则表达式匹配有点复杂;所以对于后一个问题,使用第二个 preg_replace_callback 过滤掉案例可能是有意义的。