正则表达式忽略重音?PHP

eSi*_*oll 13 php regex diacritics preg-replace

无论如何要制作一个忽略重音的正则表达式?

例如:

preg_replace("/$word/i", "<b>$word</b>", $str);
Run Code Online (Sandbox Code Playgroud)

正则表达式中的"i"是忽略区分大小写,但无论如何要匹配,例如
javaJávã

我确实尝试制作$ str的副本,将内容更改为无重音字符串并找到所有出现的索引.但是2个字符串的索引似乎是不同的,即使它只是没有重音符号.

(我做了一项研究,但我所能找到的是如何从字符串中删除重音)

小智 7

我不认为,有这样的方式.这将是与语言环境相关的,你可能首先想要一个"/ u"开关来启用模式字符串中的UTF-8.

我可能会做这样的事情.

function prepare($pattern)
{
   $replacements = Array("a" => "[áàäâ]",
                         "e" => "[éèëê]" ...);
   return str_replace(array_keys($replacements), $replacements, $pattern);  
}

pcre_replace("/(" . prepare($word) . ")/ui", "<b>\\1</b>", $str);
Run Code Online (Sandbox Code Playgroud)

在你的情况下,索引是不同的,因为除非你使用mb_string你可能正在处理UTF-8,每个字符使用多个字节.