PHP-REGEX:重音字母与非重音字母匹配,反之亦然.如何实现这一点


PHP-REGEX: accented letters matches non-accented ones, and vice versa. How to achieve this?

我想做典型的高亮代码。所以我有这样的东西:

$valor = preg_replace("/(".$_REQUEST['txt_search'].")/iu", "<span style='background-color:yellow; font-weight:bold;'>''1</span>", $valor);

现在,请求词可以是类似于"josé"的东西。有了它,我也希望突出显示"何塞"或"何塞"或"何塞"等。

使用此表达式,如果我写"josé"

,它将匹配"josé"和"josé"(以及所有大小写变体)。它始终仅与重音变体匹配。如果我搜索"何塞",它匹配"何塞"、"何塞"、"何塞",但与带重音的不匹配。所以我有部分我想要的,因为我分别对重音和非重音不区分大小写。

我需要它完全组合,这意味着口音(unicode)不敏感,所以我可以搜索"何塞",并突出显示"何塞","何塞",...

我不想替换单词上的重音,因为当我在屏幕上打印它时,我需要看到真正的单词。

有什么想法吗?

谢谢!

您可以尝试创建一个函数来根据您的txt_search创建正则表达式,将任何可能的匹配项替换为所有可能的匹配项,如下所示:

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/é/É 的所有实例替换为 catch-all [eEéÉ]。对所有其他情况执行相同的操作。因此,在您的示例中,搜索模式而不是何塞/何塞/何塞将jos[éÉeE]