Подсветка синтаксиса с нечувствительным к регистру синтаксисом

Я пытаюсь написать поиск и подсветку синтаксиса. Давайте предположим, что у нас есть базовый запрос, который запрашивает страны, например, по ключевому слову. уни.

Прямо сейчас я использую Sphinx, чтобы получить результаты, которые соответствуют этому ключевому слову, из базы данных, и я использую поиск без учета регистра. Результаты, которые возвращает sphinx, следующие:

Tanzania, United Republic of
United Arab Emirates
United Kingdom
United States
Igaunija
Estados unidos Mexicanos

Теперь я хочу выделить ключевое слово поиска из этих строк, обернув ключевое слово в <span>,

Чтобы добиться этого, я пытался сделать следующее:

$search='uni';
foreach($keyword as $text) { // $keyword is an array, containg each found result one by one
$text=str_replace($search, "<span>".$search."</span>", $text);
}

Только с этим кодом Iguanija, а также Estados unidos Mexicanos выделяется, потому что в любом другом случае ключевое слово начинается с заглавной буквы. Если я изменю str_replace к str_ireplace, каждое поисковое ключевое слово становится выделенным, но в первых нескольких записях заглавными буквами U заменяется строчными uтак что из United Kingdom, Я получил united Kingdom, Как можно выделить ключевое слово для поиска и сохранить регистр символов в результате?

Мой желаемый результат будет примерно таким:

Tanzania, <span>Uni</span>ted Republic of
<span>Uni</span>ted Arab Emirates
<span>Uni</span>ted Kingdom
<span>Uni</span>ted States
Iga<span>uni</span>ja
Estados <span>uni</span>dos Mexicanos

2

Решение

Вы можете использовать регулярное выражение, которое позволит вам сохранить регистр исходной строки.

<?php

$unis = <<< UNIS
Tanzania, United Republic of
United Arab Emirates
United Kingdom
United States
Igaunija
Estados unidos Mexicanos
UNIS;

var_dump(preg_replace('/(uni)/i','<span>$1</span>',$unis));

Выход

string(190) "Tanzania, <span>Uni</span>ted Republic of
<span>Uni</span>ted Arab Emirates <span>Uni</span>ted Kingdom
<span>Uni</span>ted States Iga<span>uni</span>ja Estados
<span>uni</span>dos Mexicanos"
3

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

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