regex — Как выделить совпадающую часть строки в переполнении стека

Это моя текущая функция в php:

function highlight_keywords($keyword, $string) {
return preg_replace("/\p{L}*?".preg_quote($keyword)."\p{L}*/ui", "<span class=\"h\">$0</span>", $string);
}

Класс CSS:

span.h {
font-weight: 700;
color: @color_action;
}

Пример:

echo highlight_keywords('anto', 'Andres Santos');

Проблема в том, что результат:

Andres <span class="h">Santos</span>

…и это должно быть:

Andres S<span class="h">anto</span>s

0

Решение

Используйте группы захвата:

function highlight_keywords($keyword, $string) {
return preg_replace("/(\p{L}*?)(".preg_quote($keyword).")(\p{L}*)/ui", "$1<span class=\"h\">$2</span>$3", $string);
}
0

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

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

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