到目前为止,我还没有在正则表达式中使用不情愿的量词,我看一下该网站的一些问题,以了解其功能及其用途。虽然similar question非常具有描述性,但我仍然无法理解它与java tutorial中的示例有何关联。我已经理解,不情愿的量词匹配尽可能少的情况。那么,它如何解释正则表达式
".*?foo"
字符串上的
"xfooxxxxxxfoo"
返回两个匹配项:"xfoo"
和"xxxxxxfoo"
?
此外,由于占有量词的解释也不充分,有人可以解释为什么正则表达式
".*+foo"
在同一个String上什么都不匹配?
答案 0 :(得分:3)
“贪婪,不情愿和占有量词之间的差异”一节中教程页面的描述对我来说非常清楚。你不明白它的哪一部分?
回答您的具体问题:
对于模式".*?foo"
,不情愿的量词(.*?
)首先得不到任何东西;模式的其余部分(foo
)无法匹配。匹配备份到不情愿的量词,然后抓取一个字符(x
);然后模式的其余部分匹配。整个模式然后再次开始(在第一个"foo"
之后)并且不匹配,直到它在第二个x
之前抓取所有foo
个字符,此时它具有第二个匹配。
对于模式,(".*+foo"
),占有量词(.*+
)抓取所有可能的输入(因为"."
匹配任何东西)并且没有剩下任何东西结束以匹配模式的"foo"
部分。因为".*+"
占有欲,所以不会给予任何回报;因此,与贪婪量词不同,当匹配占有量词时,它就会失败。