准确贪婪/不情愿X {n}之间的区别?

时间:2016-03-20 04:41:39

标签: regex regex-greedy reluctant-quantifiers

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

  

贪婪的量词

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

不情愿的量词

     
      
  • X {N}? X,恰好n次
  •   
  • ...
  •   

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

起初我想,“好吧,也许差异在于X本身可以以不同的方式匹配。”但是X内部可以有自己的贪婪/不情愿的说明符,而且我确实测试了它,这不是差异(greedy vs reluctant)。

鉴于此,在任何一种情况下,它都会完全匹配n次,这两者的行为有什么区别吗?

1 个答案:

答案 0 :(得分:5)

当可变长度匹配时,不情愿与贪婪才有意义;一个不情愿的量词将匹配最小可能,并贪婪的最大值。

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

根据输入1234567,捕获的组是:

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

当只有固定数量时,例如\d{2},通过添加?行为没有区别。