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

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

现在,请求词可能类似于“josé”。有了它,我还想突出显示“jose”或“JOSÉ”或“José”等。

使用这个表达式,如果我写“josé”,它匹配“josé”和“JOSÉ”(以及所有大小写变体)。它始终仅匹配重音变体。如果我搜索“jose”,它会匹配“JOSE”、“jose”、“Jose”,但不匹配重音的。所以我有部分我想要的,因为我对重音和非重音分别不区分大小写。

我需要它完全结合,这意味着重音(unicode)不敏感,所以我可以搜索“jose”,并突出显示“josé”,“josÉ”,“José”,“JOSE”,“JOSÉ”,“JoSé”,.. .

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

有任何想法吗?

谢谢!

最佳答案

您可以尝试创建一个函数来根据您的 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 上的正则表达式。

关于PHP-REGEX : accented letters matches non-accented ones, 反之亦然。如何实现这一目标?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10837247/

10-11 04:10