如何匹配正则表达式unicode文本忽略字符上的变音符号(ÁÉÍ)

时间:2015-01-13 21:58:23

标签: php regex unicode preg-replace diacritics

我想要实现的是 - 我想使用preg-replace来强调建议中的搜索字符串,但忽略字符,空格或撇号上的变音符号。因此,当我要搜索 ha 时,我的搜索建议将如下所示:

  • O'的 RA
  • ÓcC intighe
  • H'a SOMETHING

我做了很多研究,但还没有提出任何代码。我只是想知道我可以用变音符号(例如:Á,É...)将字符转换为字符和修饰符(A +',E +'),但我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

我终于找到了工作解决方案,感谢Tibor的回答:Regex to ignore accents? 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);
  }