Функция выделения выделяет слова в словах

Я разработал следующую функцию, чтобы выделить имена результатов поиска.

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

Моя проблема в том, что если текст «Это конец», и я ищу «это», он будет выделен так:это есть конец «потому что слово« есть »тоже в« этом ».

Кто-нибудь знает, как это исправить?

Моей первой мыслью было заменить только пробел [пробел], но это не очень хорошее решение, потому что первое слово в предложении не получило пробела в начале. 🙁

Спасибо за помощь.

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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]