精确 greedy/reluctant X{n} 之间的差异?

Difference between exact greedy/reluctant X{n}?

在 Java Pattern class 的文档中,我看到确切的量词 X{n} 有贪婪和不情愿的形式:

Greedy quantifiers

  • X{n} X, exactly n times
  • ...

Reluctant quantifiers

  • X{n}? X, exactly n times
  • ...

文档给出了贪婪行为和不情愿行为之间区别的一般示例,但没有给出确切量词的任何示例。

起初我想,"Well, maybe the difference is that X itself could match in difference ways." 但是 X 里面可以有自己的 greedy/reluctant 说明符,果然我测试了它,这没有区别 (greedy vs reluctant).

鉴于无论哪种情况,它都会精确匹配 n 次,两者的行为有什么区别吗?

不情愿与贪婪只有在可以进行可变长度匹配时才有意义;不情愿的量词将匹配尽可能小的值,贪婪的匹配最大值。

为了区分有限数量的行为,它必须有一个范围,即数量必须有不同的最小值和最大值。举例说明:

给定输入 1234567,捕获的组是:

(\d{2,3})(\d+)  -> (123)(4567)
(\d{2,3}?)(\d+) -> (12)(34567)

当只有固定数量时,例如 \d{2} 添加 ?.

在行为上没有区别