Bir sözcüğün sonundaki kelimeleri vurgulayarak

2 Cevap php

Ben daha iyi başlık phrased olabilirdi nasıl emin değilim, ama benim sorun vurgulamak işlevi sözcüğün sonunda olan arama kelimeleri vurgulamak olmamasıdır. arama anahtar 'öz' ise, örneğin, bu 'kendini' veya 'kendini huzursuzluğa' veya [sermaye S] 'Öz' vurgular ama 'kendiniz' bir öz ya da 'kendini', vb vurgulamak olmaz .

Bu vurgulamak işlevi:

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 Cevap

Size bir kelime sınır anlamına gelir, sizin regex başında bir \b olabilir gibi görünüyor. 'Kendinize' de 'öz' bir kelime sınırından başlamak olmadığından, bu uymuyor. \b kurtulun.

Böyle bir şey deneyin:

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

Her arama kelimesi düzgün alıntı böylece döngü vardır ...

EDIT: Modified function to take either string or array in $words parametresi.