gpt4 book ai didi

regex - 为什么 "a*a+"和 "(a{2,3})*a{2,3}"可以匹配 "aaaa"而 "(a{2,3})*"不能?

转载 作者:行者123 更新时间:2023-12-01 01:46:50 24 4
gpt4 key购买 nike

我对*的理解是它消耗尽可能多的字符(贪婪地)但在必要时“回馈”。因此,在 a*a+ , a*会给 a+ 一个(或者更多?)字符所以它可以匹配。

然而,在 (a{2,3})* ,为什么不是 a{2,3} 的第一个“实例”给第二个“实例”一个字符,以便第二个可以匹配?

此外,在 (a{2,3})*a{2,3}第一部分似乎确实赋予了第二部分一个特征。

最佳答案

您的问题的一个简单解决方法是匹配 aaaa使用正则表达式 ^(a{2,3})*$ .

你的问题是:

In the case of (a{2,3})*, regex doesn't seem to consume as much character as possible.



我建议不要考虑回馈角色。相反, key 是 验收 .

一次正则表达式 接受 您的字符串,匹配将结束。图案 a{2,3}只匹配 aaaaa .所以在匹配 aaaa的情况下与 (a{2,3})* ,贪婪引擎将匹配 aaa .然后,它不能匹配更多 a{2,3}因为只有一个 a留下了。尽管正则表达式引擎能够进行回溯并匹配额外的 a{2,3} ,不会。 aaa现在是 接受 通过正则表达式,因此正则表达式引擎不会进行昂贵的回溯。

如果您添加 $在正则表达式的末尾,它只是告诉正则表达式引擎部分匹配是 Not Acceptable 。此外,很容易解释 (a{2,3})*a{2,3}接受和回溯的情况。

关于regex - 为什么 "a*a+"和 "(a{2,3})*a{2,3}"可以匹配 "aaaa"而 "(a{2,3})*"不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48070072/

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