【问题标题】:How to match with regex unicode text ignoring diacritics on characters (Á É Í)如何匹配正则表达式 unicode 文本,忽略字符上的变音符号 (Á É Í)
【发布时间】:2015-03-12 00:08:54
【问题描述】:

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

  • O'哈哈ra
  • Ó an Cintighe
  • 有些东西

我进行了大量研究,但还没有提出任何代码。我只是有一个想法,我可以以某种方式将带有变音符号的字符(例如:Á、É...)转换为字符和修饰符(A+´、E+´),但我不知道该怎么做。

【问题讨论】:

  • 但我不想删除变音符号——我只想用正则表达式“忽略”它。
  • 您可以删除变音符号并使用删除了所有变音符号的字符串。 PCRE 不提供“字符等效”功能。
  • 我也想过这个问题,但问题是我需要在字符串的突出显示(粗体)部分显示带有变音符号的单词。
  • 有人可以删除“这个问题在这里可能已经有答案:”文本吗?这是不对的。把它放在那里的人显然误解了我的问题。

标签: php regex unicode preg-replace diacritics


【解决方案1】:

感谢 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);
  }

【讨论】:

  • àÀâÂèÈêÊëËîÎïÏôÔùÙüÜçÇ 怎么样?只是在谈论法语变音符号。
  • 可以,不过我只是替你说,你还是换个答案吧,不是我的问题,我已经知道怎么处理了。
  • 字符串有变音符号且搜索键也有变音符号时不起作用
猜你喜欢
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2020-12-09
相关资源
最近更新 更多