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本机。真了不起!你让我开心!你能用你认为函数中有趣的字符把它扩展一点吗?谢谢