0

どうすればタイトルをうまく表現できたのかわかりませんが、強調表示機能が単語の末尾にある検索キーワードを強調表示しないという問題があります。たとえば、検索キーワードが「self」の場合、「self」または「self-lessness」または「Self」[大文字の S] は強調表示されますが、「yourself」または「himself」などの自己は強調表示されません。 .

これはハイライト機能です:

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;
}
4

2 に答える 2

2

\b正規表現の先頭に、単語の境界を意味する a があるようです。「yourself」の「self」は単語境界で始まっていないため、一致しません。を取り除き\bます。

于 2010-05-28T19:41:32.087 に答える
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編集:パラメータで文字列または配列のいずれかを取るように関数を変更しました。

于 2010-05-28T19:49:40.143 に答える