0

我在这里有关键字“加粗”功能:

$ignore = array ('div', 'class', 'high', 'light', 'highlight');
$keywords = explode(' ', $qsvarus);
$title[$key] = preg_replace('/'.implode('|', $keywords).'/i', '<b>$0</b>', $title[$key]);
$infoo[$key] = preg_replace('/'.implode('|', $keywords).'/i', '<b>$0</b>', $infoo[$key]);

问题是它有时会捕获我的一些 html 标签。如何告诉它在 $keywords 时忽略 $ignore 数组中少于 3 个字母和某些特定单词的所有内容<b></b>

4

1 回答 1

2

我会先简单地循环关键字数组,删除忽略数组中的所有匹配项(使用 in_array)以及任何 3 个字符或更少字符的关键字。

然后,如果您想确保自己不在标签中,则以下内容就足够了:

/\b(keyword|keyword|keyword)\b(?![^<]*[>])/

我基本上附加了一个负面的前瞻:

(?![^<]*[>])

只要>前面没有打开标签的关闭 html 不匹配,正则表达式就会<匹配。我确实得到了一个结束标签,你应该能够*假设你在一个标签内。

把它放回preg_replace:

preg_replace('/\b('.implode('|', $keywords).')\b(?![^<]*[>])/i', '<b>$1</b>', $subject);
  • 这确实假设没有未编码的大于 ( >)
于 2012-12-11T11:20:02.713 回答