忽略搜索突出显示功能中的短字符和特定单词

时间:2012-12-11 11:11:02

标签: php regex preg-replace explode implode

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

$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标签。如何告诉它在<b></b> $ keywords之后忽略3个字母和$ ignore数组中某些特定单词的所有内容?

1 个答案:

答案 0 :(得分:1)

我只是首先循环关键字数组,删除ignore数组中的任何匹配项(使用in_array)以及任何3个字符或更少字符的关键字。

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

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

我基本上附加了一个负面的预测:

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

只要前面的结尾标记>没有开头标记<不匹配,正则表达式就会匹配。我得到一个结束标记,您应该能够*假设您在标记内。

将其放回preg_replace:

preg_replace('/\b('.implode('|', $keywords).')\b(?![^<]*[>])/i', '<b>$1</b>', $subject);
  • 这假设没有未编码的大于(>