Как сопоставить текст с юникодом regex, игнорируя диакритические знаки символов (Á É Í)

То, чего я пытаюсь добиться, — я хочу использовать preg-replace, чтобы выделить искомую строку в предложениях, но игнорируя диакритические знаки символов, пробелов или апостроф. Поэтому, когда я буду, например, искать ха мои поисковые предложения будут выглядеть так:

  • хара
  • C Cintighe
  • h’aЧТО-ТО

Я провел множество исследований, но пока не придумал ни одного кода. У меня просто есть идея, что я мог бы каким-то образом преобразовать символы с диакритическими знаками (например, Á, É …) в символ и модификатор (A + ´, E + ´), но я не уверен, как это сделать.

0

Решение

Я наконец нашел рабочее решение благодаря ответу Тибора здесь: Regex игнорировать акценты? PHP

Моя функция выделяет текст, игнорируя диакритические знаки, пробелы, апострофы и тире:

  function highlight($pattern, $string)
{
$array = str_split($pattern);

//add or remove characters to be ignored
$pattern=implode('[\s\'\-]*', $array);

//list of letters with diacritics
$replacements = Array("a" => "[áa]", "e"=>"[ée]", "i"=>"[íi]", "o"=>"[óo]", "u"=>"[úu]", "A" => "[ÁA]", "E"=>"[ÉE]", "I"=>"[ÍI]", "O"=>"[ÓO]", "U"=>"[ÚU]");

$pattern=str_replace(array_keys($replacements), $replacements, $pattern);

//instead of <u> you can use <b>, <i> or even <div> or <span> with css class
return preg_replace("/(" . $pattern . ")/ui", "<u>\\1</u>", $string);
}
0

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

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

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