在regex中使用不情愿的量词
到目前为止,我还没有在正则表达式中使用不情愿的量词,并且我看了一些关于该网站的问题,以了解它的功能和用法。 虽然类似的问题是相当具有描述性的,但我仍然无法理解它如何与java教程中的示例相关联。 我明白,不情愿的量词匹配尽可能少的情况。 那么,它是如何解释这个正则表达式的
".*?foo"
在一个字符串上
"xfooxxxxxxfoo"
返回两个匹配: "xfoo"
和"xxxxxxfoo"
?
而且,由于所有格量词的解释也不够,有人可以解释为什么正则表达式
".*+foo"
在相同的字符串不匹配任何东西?
在“贪心,不情愿和拥有量词之间的差异”一节的教程页面上的描述对我来说似乎很清楚。 你不了解什么部分?
回答你的具体问题:
对于模式".*?foo"
,不情愿的量词( .*?
)首先没有抓取; 模式的其余部分( foo
)无法匹配。 匹配支持一个字符( x
)的不情愿量词; 然后模式的其余部分匹配。 整个模式然后重新开始(在第一个"foo"
),并且不匹配,直到它抓住第二个foo
之前的所有x
字符,此时它具有第二个匹配。
对于这个模式,( ".*+foo"
),占有量词( .*+
)获取所有可能的输入(因为"."
匹配任何内容),并且没有任何剩余的匹配"foo"
部分该模式。 因为".*+"
是占有欲,它不会给任何回报; 因此,与贪婪量词不同,当匹配返回所有格量词时,它就会失败。
上一篇: Use of reluctant quantifier in regex
下一篇: What tools are there for debugging/stepping through a regular expression?