请看一下这个:
如你所见,只有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(使用前将#替换为@)