在一个单词的末尾突出显示单词

时间:2010-05-28 19:30:22

标签: php search keyword highlight

我不确定我怎么能更好地表达标题,但我的问题是突出显示功能并没有突出显示在单词末尾的搜索关键字。例如,如果搜索关键字是'self',它将突出显示'self'或'self-lessness'或'Self'[with capital S],但它不会突出显示'self'或'self'等自我。

这是亮点功能:

function highlightWords($text, $words) {
    preg_match_all('~\w+~', $words, $m);
    if(!$m)
        return $text;
    $re = '~\\b(' . implode('|', $m[0]) . ')~i';
    $string = preg_replace($re, '<span class="highlight">$0</span>', $text);

    return $string;
}

2 个答案:

答案 0 :(得分:2)

看起来你的正则表达式的开头可能有一个\b,这意味着一个单词边界。由于'你自己'中的'self'不是从单词边界开始,所以它不匹配。摆脱\b

答案 1 :(得分:0)

尝试这样的事情:

function highlight($text, $words) {
    if (!is_array($words)) {
        $words = preg_split('#\\W+#', $words, -1, PREG_SPLIT_NO_EMPTY);
    }
    $regex = '#\\b(\\w*(';
    $sep = '';
    foreach ($words as $word) {
        $regex .= $sep . preg_quote($word, '#');
        $sep = '|';
    }
    $regex .= ')\\w*)\\b#i';
    return preg_replace($regex, '<span class="highlight">\\1</span>', $text);
}

$text = "isa this is test text";
$words = array('is');

echo highlight($text, $words);  // <span class="highlight">isa</span> <span class="highlight">this</span> <span class="highlight">is</span> test text

循环,以便每个搜索词都被正确引用...

编辑:修改了$words参数中的字符串或数组的函数。