【发布时间】:2011-07-08 08:34:50
【问题描述】:
如果关键字本身不在某个结束标记内,我们有一段正则表达式会在关键字周围添加一个<strong> 标记。这一直很好用...
foreach ($keywords as $keyword) {
$str = preg_replace("/(?!(?:[^<]+>|[^>]+(<\/strong>|<\/a>|<\/b>|<\/i>|<\/u>|<\/em>)))\b(" . preg_quote($keyword, "/") . ")\b/is", "<strong>\\2</strong>", $str, 1);
}
所以如果关键字是test,这会改变:
A test line
到:
A <strong>test</strong> line
但这不会改变:
<a href="">A test line</a>
如您所见,我们希望它忽略的结束标签列表位于正则表达式中。
我们遇到了一个字符串问题,如下所示:
<a href="">A test <em>line</em></a>
它无法识别结束时的</a> 或</em>,所以它以...的形式出现。
<a href="">A <strong>test</strong> <em>line</em></a>
我们不希望它这样做。任何人都可以看看是否有解决这个问题(是的,我知道不要使用正则表达式规则解析 HTML,所以发布指向那个臭名昭著的帖子的链接不是答案;-))
【问题讨论】:
-
对不起,但是...如果您知道这一点,为什么您仍然使用正则表达式解析 HTML? ;-)
-
我知道您知道不要使用正则表达式规则解析 HTML,所以我还是会将链接发布到臭名昭著的帖子:stackoverflow.com/questions/1732348/…
标签: php regex html-parsing