php preg_grep 和元音变音/重音

2024-04-05

我有一个由术语组成的数组,其中一些包含重音字符。我像这样做了 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从国际分机 http://php.net/class.transliterator,您可以将其替换为任何其他类似的音译或翻译功能。

我不建议使用str_replace顺便说一句,如果您需要回退到转换表,请使用strtr http://php.net/strtr反而。这就是您要寻找的。但我更喜欢一个自带翻译的库,特别是如果它是 Intl 库,你通常无法击败它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php preg_grep 和元音变音/重音 的相关文章

  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  •  
    标记内删除

    我制作了简单的 BBCode 脚本 一切正常 但后来我使用了一个 javascript 库来美化我的代码 pre pre 现在我面临的唯一问题是 br 每行代码后面的标签 pre pre tags 所以问题是我怎样才能删除 br 标记哪些在
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • 扩展蓝图类?

    我想覆盖timestamps 函数中发现Blueprint班级 我怎样才能做到这一点 e g public function up Schema create users function Blueprint table table gt
  • 蛋糕控制台 2.2.1:烘焙错误

    运行 MAMP 的 OSX 机器 CakePHP 2 2 1 已正确安装和配置 这意味着当我浏览到 Index php 文件时 所有绿色条都显示出来 我已经完成了博客教程 并且正在开发我的第二个应用程序 其中脚手架已启动并运行 现在我第一次
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • “使用未定义常量”注意,但该常量应该被定义

    共有三个文件 common php controller php 和 user php 文件 common php 如下所示 文件controller php看起来像 文件 user php 如下所示 执行脚本时 会给出通知 注意 使用未定
  • 为什么 iconv 在 php:7.4-fpm-alpine docker 中返回空字符串

    给出以下代码
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • 在 apache docker 容器中运行虚拟主机

    我在同一个 apache 容器中有两个 php 应用程序 我试图在端口上运行其中一个应用程序 因为它需要通过根域而不是子文件夹进行访问 我想在端口 8060 上运行应用程序 我尝试使用 apache 虚拟主机执行此操作 但它不会加载页面 h
  • 使用 Ajax.Request 将 JSON 从浏览器传递到 PHP 的最佳方法

    您好 我有一个 JSON 对象 它是一个二维数组 我需要使用 Ajax Request 将其传递给 PHP 我知道的唯一方法 现在我使用js函数手动序列化我的数组 并获取以下格式的数据 s 1 d 3 4等 我的问题是 有没有办法更直接 有
  • 表单提交后如何保留选择字段中的选定值?

    我有一个用于将票证上传到数据库的主页 我有一个选择字段 我想保留用户在提交表单之前选择的值 但它没有发生 这是我选择字段的代码
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 使用正则表达式提取两个短语之间的所有单词[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下正则表达式提取两个短语之间的所有单词 b item W w W 0 2 1 one W w W 0 3 business b b item W w W 0 2 3 three W w W 0 3
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一
  • 简单的 PHP 表单:电子邮件附件(代码 Golf)

    想象一下 一个用户想要在其网站上放置一个表单 该表单将允许网站访问者上传一个文件和一条简单的消息 该消息将立即通过电子邮件发送 即 该文件未存储在服务器上 或者如果该文件存储在服务器上 仅暂时 作为文件附件 并在邮件正文中添加注释 查看更多
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B

随机推荐

  • 从给定日期中提取日、月和年的最快方法是什么?

    我将包含 150 000 行的 csv 文件读取到 pandas 数据框中 该数据框有一个字段 Date 日期为yyyy mm dd格式 我想从中提取月 日和年并将其复制到数据框的列中 Month Day and Year分别 对于几百条记
  • 对 Groupby 组内的 Pandas 数据框数据进行排序

    我有一个大的 pandas 数据框 其结构可以表示为 id date status 0 12 2015 05 01 0 1 12 2015 05 22 1 2 12 2015 05 14 1 3 12 2015 05 06 0 4 45 2
  • 我应该在removeChild之前从元素中删除事件处理程序吗?

    假设我有一个元素 img 并附加了一些事件 例如click 不是内联的onclick somewhere i wrote foo addEventListener click clickHandler false somewhere i w
  • Application Insights 未在 Azure 预览门户中显示数据

    我在 Azure 上有一个现有的 Web 应用程序 其中有一些非常有限的应用程序洞察监控 端点检查 我想我会引入其余的功能 所以我按照以下说明将遥测添加到我的项目中http azure microsoft com en us documen
  • 如何将 Visual Studio 2010 SP1 解决方案转换为 Visual Studio 2012 解决方案? [复制]

    这个问题在这里已经有答案了 我知道它们 大多数项目类型 在 2010 SP1 和 2012 之间是相互兼容的 并且没有必要进行转换 但是如果我仍然需要它怎么办 如果我需要将我的解决方案标记为 Visual Studio 2012 解决方案该
  • 在 Xcode 中使用 git 时 UserInterfaceState.xcuserstate 未提交

    当我尝试提交代码项目时 它显示一个名为 UserInterfaceState xcuserstate 的文件 必须提交该文件 一旦我提交并尝试将我的项目推送到 git Xcode 就会弹出一条消息 提示 工作副本 app 有未提交的更改 当
  • 使用 bxslider 时图像上没有箭头

    我刚刚了解了 bxslider 并通过阅读文档制作了我的第一个幻灯片 但我看不到图像上的左右箭头 因此可以通过单击显示下一张图像如以下示例所示 这个链接 http bxslider com examples image slideshow
  • 我怎样才能为基础 R 做出小小的贡献?

    偶尔我会看到一些可以改进 R 最近是 IQR 命令 和 R 文档 就在本周可能会详细说明aggregate tapply 和 by 之间的差异以及更好地互连 的小方法 但我看不出有什么办法可以真正回报这一贡献 我查看了开发人员网站 似乎我的
  • PHP SQL数据库查询错误信息

    这段SQL代码有什么问题吗 我从教程中得到它 但它返回以下错误消息 数据库查询失败 您有一个 SQL 语法错误 检查 与您的 MySQL 对应的手册 服务器版本的正确语法 在第 1 行 LIMIT 1 附近使用 function get s
  • 使用 python 将 tsv 文件转换为 xls/xlsx

    我想将 tsv 格式的文件转换为 xls xlsx 我尝试使用 os rename sample tsv sample xlsx 但转换后的文件已损坏 还有其他方法吗 这是一个使用 TSV 转换为 XLSX 的简单示例XlsxWriter
  • Android - 使用应用程序上下文创建 WebView 后如何将其附加到 Activity

    我正在使用应用程序上下文在后台创建一个 Android WebView 以便在我需要显示它时加载并准备好它 当需要时 我使用 addView 将其附加到我的 Activity 中 这通常工作得很好 但是当我尝试打开 HTML 选择下拉列表时
  • 将文本输入滑动窗口并进行计数

    我有这样的文件 超过 1 个缺少行 20 14370 rs6054257 G A 29 PASS NS 3 DP 14 AF 0 5 DB H2 GT GQ DP HQ 0 0 48 1 51 51 20 17330 T A 3 q10 N
  • 通过点击表格行触发jquery

    我喜欢在表格中有一行使其可点击 而不仅仅是行中的文本 因此我使用以下代码使其打开另一个页面 td 但是现在我使用 jquery 和下面的代码在 div 中而不是在新页面中打开新页面 我将如何更新我的行代码以打开 div 中的内容而不是在新页
  • mod_rewrite 用名称替换 ID

    我的网站上有一个动态显示内容的页面 网址结构是mywebsite com giveaway giveaway php id any number 我希望将该动态 URL 更改为静态 友好 URLmywebsite com giveaway
  • PageNumberPagination 和没有固定顺序的查询集

    根据文档 http www django rest framework org api guide pagination pagenumberpagination 当使用继承自的类时 无需任何特殊即可启用分页GenericAPIView 我
  • 使用 ajax 发布时的 net::ERR_EMPTY_RESPONSE

    你好 我正在尝试逐个上传 xlsx 文件 以便我可以显示状态栏 问题是 我使用 for 循环和 while 循环通过 ajax 发送请求来做到这一点 但是当位于第 40 个元素时 它会停止并且控制台显示 POST site php net
  • Android:当片段更改时如何重新创建操作栏

    我有一个活动显示一些片段 Activity 视图仅包含使用自定义 FragmentPagerAdapter 初始化的 ViewPager 该适配器提供 3 个片段之间的导航 除了操作栏之外 一切似乎都工作正常 我在片段中重写 onCreat
  • Chrome 扩展:每个选项卡的存储空间

    我想将扩展的状态存储在单个文件中而不是存储在单个文件中chrome storage但每个选项卡 扩展是关于在任何页面上制作网格系统覆盖 并希望存储每个选项卡的最新更新 这里是一些代码 popup js function let gridTo
  • Android 中触摸时可以模糊部分图像吗?

    我想模糊图像视图上的特定区域 例如 我想允许用户在android中绘制类似于裁剪的矩形 一旦用户在图像上绘制该矩形 矩形内的区域将变得模糊 或手指触摸 我搜索了很多 但大多数示例都解释了如何模糊完整图像 找不到任何解释如何仅模糊某些部分的教
  • php preg_grep 和元音变音/重音

    我有一个由术语组成的数组 其中一些包含重音字符 我像这样做了 preg grep data array Napol on Caf result preg grep input i data 因此 如果用户输入 le 我还希望结果 Napol