为什么模式匹配一​​个单词而有两个相同的单词?

2024-03-29

请看一下这个:

如你所见,只有one匹配于regex101,但浏览器匹配two相同的单词。所以为什么regex101无法匹配第二个单词?无论如何我需要匹配这两个词(或更多,如果存在的话).

注意到它与以下内容无关g旗帜。因为我在小提琴中使用过它。

这里是fiddle https://regex101.com/r/VWRELJ/1/


处理这样的文本对于以后的使用来说是很困难的。您必须找到每个字母的不同表示才能更改搜索词مجلس到其他类似的东西احمدی نژاد根据@Wiktor的解决方案。

这就是为什么正常化 http://php.net/manual/en/class.normalizer.php过程很方便:

规范化是一个涉及转换字符和 将字符序列转换为正式定义的底层 表示。当需要对文本进行处理时,此过程最为重要 比较排序和搜索,但在存储时也使用它 文本以确保文本以一致的表示形式存储。

我们需要首先使用以下方法规范化我们的输入字符串Normalizer::normalize() http://php.net/manual/en/normalizer.normalize.php然后,无需对正则表达式进行任何更改,我们就可以安全地运行preg_match_all超过它:

<?php

$text = <<< 'STR'
یک نماینده مجلس عنوان کرد: ﺩﺭ ﺩﻭﺭﻩ ﺍﺣﻤﺪﯼﻧﮋﺍﺩ ﻣﺮﺩﻡ ﺩﺭ
ﺭﻓﺎﻩ ﺑﻮﺩﻧﺪ !/دولت سابق تنها دولتی که پس از انقلاب به مردم خدمت کرد! ﻳﻚ
ﻧﻤﺎﯾﻨﺪﻩ ﮔﺮﻭﻩ ﭘﺎﻳﺪﺍﺭی دﺭ ﻣﺠﻠﺲ ﺷﻮﺭﺍﯼ ﺍﺳﻼﻣﯽ ﺩﺭ ﭘﺎﺳﺦ ﺑﻪ ﺳﺆﺍﻟﯽ ﺩﺭ ﻣﻮﺭﺩ
ﺑﺎﺯﮔﺸﺖ ﺍﺣﻤﺪﯼﻧﮋﺍﺩ ﺑﻪ ﻋﺮﺻﻪ ﺍﻧﺘﺨﺎﺑﺎﺕ ﺍﻇﻬﺎﺭ ﺩﺍﺷﺖ : ﻣﺎ ﺍﻣﯿﺪﻭﺍﺭﯾﻢ ﺍﯾﻦ ﺍﺗﻔﺎﻕ
ﺑﯿﻔﺘﺪ ﻭ ﺍﺣﻤﺪﯼﻧﮋﺍﺩ ﺑﺮﺍﯼ ﺷﺮﮐﺖ ﺩﺭ ﺍﻧﺘﺨﺎﺑﺎﺕ ﺣﺎﺿﺮ ﺷﻮﺩ چرا که دولت وی تنها
دولتی است که پس از انقلاب به مردم خدمت کرده است.
STR;


$normalizedText = normalizer_normalize( $text , Normalizer::NFKC );
preg_match_all('~مجلس~', $normalizedText, $matches);

print_r($matches);

Outputs:

Array
(
    [0] => Array
        (
            [0] => مجلس
            [1] => مجلس
        )

)

注意:需要php_intl.dll要启用的扩展。

现场演示 https://3v4l.org/1fgDA

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

为什么模式匹配一​​个单词而有两个相同的单词? 的相关文章

随机推荐

  • 为什么数组的类型推导优先考虑指向第一个的指针而不是对数组的引用?

    int v 1 auto p1 v auto p2 v auto p3 v p1属于类型int 同样适用于p3 特别是在这个微不足道的样本中 我发现p2 int 1 更有用 因为它固有的数组语义 例如我可以申请sizeof on p2给予与
  • Eclipse Google -App -Engine“不会增强”

    第一次日食 无法摆脱这个错误 已经尝试了谷歌上所有建议的修复方法 持久类 com blahb blahblah master UserToken 类似乎没有得到增强 您可能需要重新运行增强器并检查输出中的错误 数据库中没有表 但操作需要它
  • 如何在引导日期选择器中更改日期格式(dd-mmm-yyyy)

    Script Textbox
  • 导出导入的模块

    我有两个 javascript 模块 如下所示 inner mod js export function myFunc mod js import as inner from inner mod 我想出口myFunc from mod js
  • Typescript 用循环动态创建数组

    我正在创建一个模拟类 用于为我的 Angular2 TypeScript 项目生成示例数据 我仍然是编程初学者 并且对有关 TypeScript 的可用信息感到困惑 我的问题 我想创建 100 个项目并将它们保存在一个数组中 这 100 个
  • 如何创建表单类的新实例,然后将其作为 acDialog 框打开(暂停其他代码)?

    Problem 我有一个复杂的搜索表单 需要多次 同时 打开 以允许用户同时进行多个搜索 我发现可以使用以下命令打开表单的实例 因为它是一个类 Option Compare Database Option Explicit Array to
  • Plotly R - 错误“`line.width`当前不支持多个值。”

    当我运行以下命令时 interactive plot lt plot ly data vep wes aff rare summary x n y mean af type scatter mode markers hoverinfo te
  • 为什么 Android 不使用更多的枚举?

    我开始非常喜欢在代码中使用 C 和 Java 枚举 原因如下 它们比整数 字符串或布尔标志集更加类型安全 它们会产生更具可读性的代码 将枚举设置为无效值比 int 或字符串更困难 它们可以轻松发现变量或参数的允许值 我读到的所有内容都表明它
  • 分支/更改未合并,尽管 Gerrit 声称,它是

    每次我都看到merged关于我在 Gerrit 中的变化的状态 我确实git pull origin 我可以清楚地看到 我的更改 分支实际上尚未合并到 master 中 请检查我的 Gerrit 工作流程并告诉我 我做错了什么或缺少什么 在
  • 用于清除 Git Bash 屏幕(包括输出缓冲区)的命令

    Git 中是否有任何命令可以清除屏幕 例如在window命令行中执行了很多代码后 如果输入cls 那么它会清除之前的所有代码 所以我想要 Git 中相同类型的功能 所以任何人都可以告诉我命令名称 实际上你正在寻找一个Unix用户环境命令 c
  • Firefox 中 Window.getCompulatedStyle 未实现接口 Element 错误

    我想将一些数据附加到 HTML 元素 因此我使用了以下代码 bookListDiv append data HTMLString 一切都正常 但是我想在显示此元素时添加淡入动画 因此我将其修改为 data HTMLString hide a
  • 是否可以对任何文本分类应用 PCA?

    我正在尝试用 python 进行分类 我正在对网页使用朴素贝叶斯多项式NB分类器 将数据从网络检索到文本 稍后我对此文本进行分类 网络分类 现在 我尝试对这些数据应用 PCA 但 python 给出了一些错误 我的朴素贝叶斯分类代码 fro
  • Spark 选择 RDD 中的最高值

    原始数据集是 numbersofrating title avg rating newRDD 3 monster 4 4 minions 3D 5 我想在newRDD中选择前N个avg ratings 我使用以下代码 它有一个错误 sele
  • 模拟对象返回带有 Moq 的模拟列表

    我正在尝试测试以下代码 public void CleanUp List
  • 直接读取程序计数器

    Intel CPU 上的程序计数器可以在内核模式或其他模式下直接读取 即没有 技巧 吗 不 EIP IP 无法直接访问 但在位置相关代码中 它是链接时间常量 因此您可以使用附近 或远处 的符号作为立即数 mov eax nearby lab
  • 使用python(windows)创建两个子进程

    使用Python编程语言完成以下任务 创建两个进程 我们称之为 P1 和 P2 P1应该打印 我是P1 P2应该打印 我是P2 主进程 创建 P1 和 P2 的进程 应该等待它们 然后 P1和P2完成后 主进程应该打印 我是主进程 两个进程
  • 在特定行之后添加行

    我正在尝试将特定行添加到文件中的特定区域 我正在使用这个 new file open file txt r for line in new file if line Include below line line nIncluded tex
  • Find() 与Where().FirstOrDefault()

    我经常看到人们使用Where FirstOrDefault 进行搜索并获取第一个元素 为什么不直接使用Find 对方有优势吗 我看不出有什么不同 namespace LinqFindVsWhere class Program static
  • 使用正则表达式修剪电话号码

    可能是一个简单的正则表达式问题 如何从电话号码中删除除前导 之外的所有非数字 i e 012 3456 gt 0123456 1 234 56789 gt 123456789
  • 为什么模式匹配一​​个单词而有两个相同的单词?

    请看一下这个 如你所见 只有one匹配于regex101 但浏览器匹配two相同的单词 所以为什么regex101无法匹配第二个单词 无论如何我需要匹配这两个词 或更多 如果存在的话 注意到它与以下内容无关g旗帜 因为我在小提琴中使用过它