在Java Pattern
类的文档中,我看到确切的量词X{n}
有贪婪和不情愿的形式:
贪婪的量词
- X {n} X,正好是n次
- ...
不情愿的量词
- X {N}? X,恰好n次
- ...
文档提供了贪婪和不情愿行为之间差异的一般示例,但没有给出确切量词的任何示例。
起初我想,“好吧,也许差异在于X
本身可以以不同的方式匹配。”但是X
内部可以有自己的贪婪/不情愿的说明符,而且我确实测试了它,这不是差异(greedy vs reluctant)。
鉴于此,在任何一种情况下,它都会完全匹配n
次,这两者的行为有什么区别吗?
答案 0 :(得分:5)
当可变长度匹配时,不情愿与贪婪才有意义;一个不情愿的量词将匹配最小可能,并贪婪的最大值。
要区分有限数量的行为,必须具有范围,即数量必须具有不同的最小值和最大值。举例说明:
根据输入1234567
,捕获的组是:
(\d{2,3})(\d+) -> (123)(4567)
(\d{2,3}?)(\d+) -> (12)(34567)
当只有固定数量时,例如\d{2}
,通过添加?
行为没有区别。