PHP-REGEX:重音字母与非重音字母匹配,反之亦然。如何做到这一点?
我想做典型的突出显示代码。所以我有点像:PHP-REGEX:重音字母与非重音字母匹配,反之亦然。如何做到这一点?,php,regex,case-insensitive,non-ascii-characters,Php,Regex,Case Insensitive,Non Ascii Characters,我想做典型的突出显示代码。所以我有点像: $valor = preg_replace("/(".$_REQUEST['txt_search'].")/iu", "<span style='background-color:yellow; font-weight:bold;'>\\1</span>", $valor); $valor=preg\u replace(“/(“$\u请求['txt\u搜索]”)”)/iu“,“\\1”,$valor); 现在,请求词可能类似于
$valor = preg_replace("/(".$_REQUEST['txt_search'].")/iu", "<span style='background-color:yellow; font-weight:bold;'>\\1</span>", $valor);
$valor=preg\u replace(“/(“$\u请求['txt\u搜索]”)”)/iu“,“\\1”,$valor);
现在,请求词可能类似于“josé”。有了它,我想要“何塞”或“何塞”或“何塞”等突出显示
使用这个表达式,如果我写“josé”,它与“josé”和“josÉ”(以及所有案例变体)匹配。它始终仅与重音变体匹配。如果我搜索“jose”,它会匹配“jose”、“jose”、“jose”,但不会匹配重音符号。所以我有一部分我想要的,因为我对重音和非重音分别不区分大小写
我需要它完全组合,它意味着不区分重音(unicode),所以我可以搜索“jose”,并突出显示“josé”、“josé”、“josé”、“jose”、“josé”、“josé”
我不想替换单词上的重音,因为当我在屏幕上打印时,我需要看到真正的单词
有什么想法吗
谢谢 您可以尝试创建一个函数,根据txt_搜索创建正则表达式,将任何可能的匹配替换为所有可能的匹配,如下所示:
function search_term($txt_search) {
$search = preg_quote($txt_search);
$search = preg_replace('/[aàáâãåäæ]/iu', '[aàáâãåäæ]', $search);
$search = preg_replace('/[eèéêë]/iu', '[eèéêë]', $search);
$search = preg_replace('/[iìíîï]/iu', '[iìíîï]', $search);
$search = preg_replace('/[oòóôõöø]/iu', '[oòóôõöø]', $search);
$search = preg_replace('/[uùúûü]/iu', '[uùúûü]', $search);
// add any other character
return $search;
}
然后将结果用作preg_replace上的正则表达式。您可能需要解析搜索字符串,并修改正则表达式中的模式,以便if包含类似[eаÉ]的情况。将e/e/eE/É的所有实例替换为一个catch-all[eEÉ]。对所有其他情况也要这样做。因此,在您的示例中,搜索模式不是Jose/José/JosÉ,而是
Jos[ÉÉeE]
Awsome!我原以为这样做会耗费大量内存,但它的运行速度非常快,而且这是一种非常好的方法,因为我需要做的不是PHP本机。真了不起!你让我开心!你能用你认为函数中有趣的字符把它扩展一点吗?谢谢