gpt4 book ai didi

regex - 当 + 匹配时,为什么 * 不匹配?

转载 作者:行者123 更新时间:2023-12-03 10:33:04 25 4
gpt4 key购买 nike

在以下示例中(通过 regex101.com,PCRE 模式),我不明白为什么 + 量词找到了一个子字符串,而 * 却没有。

在第一个插图中,+ 量词(1 个或更多)找到所有四个小写的 a 字符(这是我所期望的):

Plus-sign quantifier finds 1 or more as expected

在第二个插图中, * 量词(0 或更多)没有找到任何小写的 a 字符(这不是我所期望的):

Asterisk quantifier doesn't find 0 or more

什么 REGEX 逻辑解释了为什么“1 或更多”(+) 找到所有四个小写 a 字符,但“0 或更多”(*) 找不到任何字符?

最佳答案

正则表达式引擎将尝试从左到右匹配字符串中每个位置的整个模式。图案/a*/成功匹配零 a s 在字符串的最开头。这就是 regex101 屏幕截图中的小虚线插入符号所表示的 - 在该位置的零宽度匹配。它会匹配更多 a s 在那个位置,但没有。尽管如此,这场比赛还是成功的。

如果您使用返回字符串中所有正则表达式匹配项的函数,那么它每次将至少向前移动一个字符以查找新匹配项,因此它将匹配 aaaa (作为一个结果)一旦到达。 Python 中的示例:

import re
regex = r"a*"
input = "AAAAaaaaBBBBbbbb"
print(re.findall(regex, input))

输出:
['', '', '', '', 'aaaa', '', '', '', '', '', '', '', '', '']

而当您使用 /a+/ 时,它无法进行那些零宽度匹配,因此它会逐步遍历输入,直到在 aaaa 处找到它的第一个也是唯一的匹配项。 .

关于regex - 当 + 匹配时,为什么 * 不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367873/

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