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

Php 如何在字符(Á;É;Í;)上忽略变音符号来匹配正则表达式unicode文本,php,regex,unicode,preg-replace,diacritics,Php,Regex,Unicode,Preg Replace,Diacritics,我试图实现的是-我想使用preg替换来突出显示建议中搜索的字符串,但忽略字符、空格或撇号上的变音符号。例如,当我搜索ha时,我的搜索建议如下所示: O'Hara Óan Cháintighe 什么东西 我做了大量的研究,但还没有找到任何代码。我只是有一个想法,我可以通过某种方式将带有变音符号的字符(例如:Á,É…)转换为字符和修饰语(A+'),e+'),但我不确定如何进行转换。我终于找到了可行的解决方案,多亏了蒂伯的回答: My函数突出显示忽略变音符号、空格、撇号和破折号的文本: fun

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

  • O'Hara
  • Óan Cintighe
  • 什么东西

我做了大量的研究,但还没有找到任何代码。我只是有一个想法,我可以通过某种方式将带有变音符号的字符(例如:Á,É…)转换为字符和修饰语(A+'),e+'),但我不确定如何进行转换。

我终于找到了可行的解决方案,多亏了蒂伯的回答:

My函数突出显示忽略变音符号、空格、撇号和破折号的文本:

  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);
  }
函数突出显示($pattern,$string)
{
$array=str_split($pattern);
//添加或删除要忽略的字符
$pattern=内爆(“[\s\'\-]*”,$array);
//带变音符号的字母列表
$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(数组_键($replacements),$replacements,$pattern);
//而不是你可以使用,甚至与css类一起使用
返回preg_replace(“/(“$pattern”)/ui”、“\\1”、$string);
}

的可能重复,但我不想删除变音符号-我只想用正则表达式“忽略”它。您可以删除变音符号,并在删除所有变音符号的情况下使用字符串。PCRE不提供“字符等效”功能。我也考虑过这一点,但问题是我需要在字符串的突出部分(粗体)显示带变音符号的单词。是否有人可以删除“这个问题可能已经有答案了:”文本?这是不对的。放在那里的人显然误解了我的问题。那《代码》呢?当然,但我只是说,对你来说,你最好改变你的答案,这不是我的问题,我已经知道如何处理。当字符串有变音符号,搜索键也有变音符号时,它不起作用