gpt4 book ai didi

正则表达式 懒惰与贪婪混淆

转载 作者:行者123 更新时间:2023-12-02 23:21:04 24 4
gpt4 key购买 nike

我对正则表达式和贪婪与懒惰有点困惑。这真的非常简单,感觉就像我错过了一些明显的东西。

我已尽可能简化我的问题以使其清晰。考虑以下字符串和正则表达式模式。

string:
aaxxxb

pattern:
(?<=a)(.*?)(?=b)

result:
axxx

what I expected:
xxx

这个结果是我使用 .* 而不是 .* 所期望的结果?我错过了什么?

显然,如果我使用 a.*?b ,同样会得到 aaxxxb。为什么是这样?懒惰(如 .*?)不应该返回尽可能少的字符吗?

最佳答案

您忽略了这样一个事实:正则表达式引擎从左到右、逐位置工作,并且一旦在当前位置找到匹配项就会成功。

在您的示例中,模式成功的第一个位置是第二个“a”。

懒惰只在右侧起作用。

如果要获取“xxx”,更好的方法是使用否定字符类[^ab]*而不是.*?

注意:与主题不完全相关,但很高兴知道:DFA 正则表达式引擎将尝试在交替的情况下获得最大的结果,NFA 会为您提供第一个成功的结果。

关于正则表达式 懒惰与贪婪混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23176140/

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