在正则表达式中使用不情愿的量词

时间:2013-04-28 12:52:13

标签: java regex reluctant-quantifiers

到目前为止,我还没有在正则表达式中使用不情愿的量词,我看一下该网站的一些问题,以了解其功能及其用途。虽然similar question非常具有描述性,但我仍然无法理解它与java tutorial中的示例有何关联。我已经理解,不情愿的量词匹配尽可能少的情况。那么,它如何解释正则表达式

".*?foo"
字符串上的

"xfooxxxxxxfoo"

返回两个匹配项:"xfoo""xxxxxxfoo"

此外,由于占有量词的解释也不充分,有人可以解释为什么正则表达式

".*+foo"

在同一个String上什么都不匹配?

1 个答案:

答案 0 :(得分:3)

“贪婪,不情愿和占有量词之间的差异”一节中教程页面的描述对我来说非常清楚。你不明白它的哪一部分?

回答您的具体问题:

  • 对于模式".*?foo",不情愿的量词(.*?)首先得不到任何东西;模式的其余部分(foo)无法匹配。匹配备份到不情愿的量词,然后抓取一个字符(x);然后模式的其余部分匹配。整个模式然后再次开始(在第一个"foo"之后)并且不匹配,直到它在第二个x之前抓取所有foo个字符,此时它具有第二个匹配。

  • 对于模式,(".*+foo"),占有量词(.*+)抓取所有可能的输入(因为"."匹配任何东西)并且没有剩下任何东西结束以匹配模式的"foo"部分。因为".*+"占有欲,所以不会给予任何回报;因此,与贪婪量词不同,当匹配占有量词时,它就会失败。