惰性量词 {n,m} 中的 max m 有什么用??

What is the use of max m in the lazy quantifiers {n,m}??

在正则表达式中,我们有 greedy and lazy quantifiers。贪心量词 {n,m} 匹配前面的 atom/character/group 最少出现 n 次,最多出现 m 次,包括在内。

如果我有一个字符串集合:

a
aa
aaa
aaaa
aaaaaaaaaa

a{2,4}匹配:

有道理。

但是,如果我有惰性量词 a{2,4}?,我会得到:

这确实有道理。它会找到最少数量的可能匹配项。

我想澄清的部分 - 以 {n,m}? 的形式传递任何惰性量词是否有用 m (在这种情况下, [=16 中的 4 =])?结果不就是总是{2,}?一样吗?

是否存在传递最大值(如 {2,4}? 中的 4)对惰性量词有用的情况?

免责声明:我实际上是在使用正则表达式在Vim (/a{-2,4}) 中进行搜索,而不是在任何脚本语言中。我觉得题的原理还是一样的

当您需要考虑延迟量化表达式后面的内容时,这很重要。惰性用于防止字符被串联中的后续表达式消耗。考虑字符串 aaaaab:

  1. 字符串与 a{2,4}?b 不匹配,因为 a 太多 a{2,4} 无法匹配。
  2. 字符串与 a{2,}?b 匹配,因为它可以根据需要匹配尽可能多的 a