gpt4 book ai didi

php preg_grep 和元音变音/重音

转载 作者:搜寻专家 更新时间:2023-10-31 20:45:17 29 4
gpt4 key购买 nike

我有一个由术语组成的数组,其中一些包含重音字符。我像这样做一个 preg grep

$data= array('Napoléon','Café');
$result = preg_grep('~' . $input . '~i', $data);

因此,如果用户输入“le”,我也希望匹配结果“Napoléon”,这不适用于 ablove 命令。

我做了一些搜索,发现这个函数可能是相关的

preg_match("/[\w\pL]/u",$var);

我怎样才能将它们结合起来并使其发挥作用?

最佳答案

仅使用正则表达式模式这是不可能的。这不是因为您不能告诉正则表达式引擎匹配所有“e”和类似的东西。但是,可以先对输入数据(数组和搜索输入)进行归一化,然后搜索归一化数据,但返回非归一化数据的结果。

在下面的示例中,我使用音译来进行这种规范化,我想这就是您要找的:

$data = ['Napoléon', 'Café'];

$result = array_translit_search('le', $data);
print_r($result);

$result = array_translit_search('leó', $data);
print_r($result);

示例输出是:

Array
(
[0] => Napoléon
)
Array
(
[0] => Napoléon
)

如上所述,搜索功能本身相当简单,音译输入,执行 preg_grep,然后返回原始输入匹配:

/**
* @param string $search
* @param array $data
* @return array
*/
function array_translit_search($search, array $data) {

$transliterator = Transliterator::create('ASCII-Latin', Transliterator::REVERSE);
$normalize = function ($string) use ($transliterator) {

return $transliterator->transliterate($string);
};

$dataTrans = array_map($normalize, $data);
$searchTrans = $normalize($search);
$pattern = sprintf('/%s/i', preg_quote($searchTrans));
$result = preg_grep($pattern, $dataTrans);
return array_intersect_key($data, $result);
}

此代码需要 Transliterator from the Intl extension ,您可以将其替换为任何其他类似的音译或翻译功能。

我不建议在这里使用 str_replace 顺便说一下,如果你需要回退到翻译表,请使用 strtr反而。这就是你要找的。但我更喜欢自带翻译的库,尤其是如果它是 Intl 库,你通常无法击败它。

关于php preg_grep 和元音变音/重音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072333/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com