gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 23:01:32 26 4
gpt4 key购买 nike

请看这个:

enter image description here

如您所见,regex101 中只有 一个 匹配,但浏览器会匹配 两个 相同的单词。那么为什么 regex101 不能匹配第二个词呢?无论如何,我需要匹配这两个词 (或更多,如果存在的话)

注意它与 g 标志无关。因为我在 fiddle 中使用过它。

这是 fiddle

最佳答案

处理这样的文本很难供以后使用。根据@Wiktor 的解决方案,您必须找到每个字母的不同表示形式,才能将搜索词从 مجلس 更改为 احمدی نژاد 等其他内容。

这就是为什么 normalization过程派上用场:

Normalization is a process that involves transforming characters and sequences of characters into a formally-defined underlying representation. This process is most important when text needs to be compared for sorting and searching, but it is also used when storing text to ensure that the text is stored in a consistent representation.

我们需要首先使用 Normalizer::normalize() 规范化我们的输入字符串然后在不对正则表达式进行任何更改的情况下,我们可以安全地对其运行 preg_match_all:

<?php

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


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

print_r($matches);

输出:

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

)

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

Live demo

关于php - 为什么模式匹配一​​个词,而有两个相同的词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43678364/

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