到目前为止,我还没有在regex中使用不情愿量词,我看了一下网站的一些问题,以了解它的功能和用法。虽然类似的问题很有描述性,但我仍然无法理解它是如何与java教程中的示例相关联的。我已经明白,不情愿量词匹配尽可能少的情况。那么,它如何解释一个正则表达式
".*?foo"
字符串
上的"xfooxxxxxxfoo"
返回两个匹配项:"xfoo"
和"xxxxxxfoo"
?
此外,既然对所有格量词的解释也不够充分,谁能解释一下为什么正则表达式
".*+foo"
在同一个字符串上不匹配任何东西?
教程页面上"贪婪、不情愿和所有格量词的区别"一节的描述在我看来非常清楚。你哪部分不明白?
回答您的具体问题:
-
对于模式
".*?foo"
,不情愿量词(.*?
)首先没有捕获任何东西;模式的其余部分(foo
)无法匹配。匹配回到不情愿量词,然后抓住一个字符(x
);然后图案的其余部分就匹配了。然后整个模式再次开始(在第一个"foo"
之后),直到它抓住第二个foo
之前的所有x
字符才匹配,此时它有第二个匹配。 -
对于模式(
".*+foo"
),所有格量词(.*+
)捕获所有可能的输入(因为"."
匹配任何内容),并且没有任何剩余的内容来匹配模式的"foo"
部分。因为".*+"
是占有型的,它不会给予任何回报;因此,与贪婪量词不同,当匹配到所有格量词时,它只是失败。