突出显示功能突出显示单词

时间:2015-03-11 09:49:18

标签: php regex highlight

我开发了以下功能来突出显示搜索结果名称。

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';

        $text = preg_replace($regex, '\\1<b>\\2</b>\\3', $text);
        $text = str_replace("</b> <b>"," ",$text);
        return $text;
    }

我的问题是,如果文字是&#34;这是结束&#34; 我正在寻找&#34;这是&#34;它将突出显示:&#34; 结束&#34;因为&#34;是&#34;在&#34;这个&#34;也是。

有人知道如何解决这个问题吗?

我的第一个想法是只替换空格[空格],但这不是一个好的解决方案,因为句子中的第一个单词在开头没有空格。 : - (

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

从正则表达式的开头和结尾删除\w*

    $regex = '#\\b(';
    $sep = '';
    foreach ($words as $word)
    {
        $regex .= $sep . preg_quote($word, '#');
        $sep = '|';
    }
    $regex .= ')\\b#i';

    $text = preg_replace($regex, '<b>$1</b>', $text);