如何匹配忽略字符变音符号的正则表达式 unicode 文本 (Á É Í)
How to match with regex unicode text ignoring diacritics on characters (Á É Í)
我想要实现的是 - 我想使用预替换来突出显示建议中的搜索字符串,但忽略字符、空格或撇号的变音符号。例如,当我搜索 ha 时,我的搜索建议将如下所示:
- O'Hara
- Ó Cháintighe
- H'a有点事
我做了很多研究,但还没有想出任何代码。我只是有一个想法,我可以以某种方式将带有变音符号的字符(例如:Á、É...)转换为字符和修饰符(A+´、E+´),但我不确定该怎么做。
感谢 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);
}
我想要实现的是 - 我想使用预替换来突出显示建议中的搜索字符串,但忽略字符、空格或撇号的变音符号。例如,当我搜索 ha 时,我的搜索建议将如下所示:
- O'Hara
- Ó Cháintighe
- H'a有点事
我做了很多研究,但还没有想出任何代码。我只是有一个想法,我可以以某种方式将带有变音符号的字符(例如:Á、É...)转换为字符和修饰符(A+´、E+´),但我不确定该怎么做。
感谢 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);
}