Учитывая следующую простую функцию (для страницы PHP), я пытаюсь сопоставить все вхождения слова $marker
в длинной текстовой строке. Мне нужно выделить его происшествия.
Функция работает, но она представляет две проблемы:
1) он не соответствует прописным буквам $marker
2) он также соответствует частичным случаям: если $ marker равен «Изобразительное искусство«, функция, как она есть, также соответствует»художественный» а также «телега».
Как я могу исправить эти два неудобства?
function highlightWords($string, $marker){
$string = str_replace($marker, "<span class='highlight success'>".$marker."</span>", $string);
return $string;
}
Чтобы решить две проблемы, вы можете использовать preg_replace()
с регулярным выражением. Просто добавьте i
флаг для поиска без учета регистра и добавления \b
границы слова вокруг вашего поискового запроса, поэтому он не может быть частью другого слова, например
function highlightWords($string, $marker){
$string = preg_replace("/(\b" . preg_quote($marker, "/") . "\b)/i", "<span class='highlight success'>$1</span>", $string);
return $string;
}
Других решений пока нет …