7

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

贪心量词

  • X{n} X,正好 n 次
  • ...

不情愿的量词

  • X{n}?X,正好 n 次
  • ...

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

起初我想,“好吧,也许不同之处在于它X本身可以以不同的方式匹配。” 但是然后X可以在其中包含自己的贪婪/不情愿的说明符,果然我测试了它,这没有区别(贪婪不情愿)。

鉴于在任何一种情况下,它都会精确匹配n时间,两者的行为有什么区别吗?

4

1 回答 1

6

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

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

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

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

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

于 2016-03-20T05:26:46.893 回答