2

到目前为止,我还没有在正则表达式中使用不情愿的量词,我查看了该网站的一些问题以了解它的功能和用途。尽管类似的问题非常具有描述性,但我仍然无法理解它与java 教程中的示例有何关联。我知道不情愿的量词匹配尽可能少的情况。那么,它如何解释正则表达式

".*?foo"

在一个字符串上

"xfooxxxxxxfoo"

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

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

".*+foo"

在同一个字符串上什么都不匹配?

4

1 回答 1

3

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

要回答您的具体问题:

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

  • 对于模式 ( ".*+foo"),所有格量词 ( .*+) 获取所有可能的输入(因为"."匹配任何内容)并且没有任何剩余的内容可以匹配"foo"模式的一部分。因为".*+"是占有欲,所以不会给予任何回报;因此,与贪心量词不同,当匹配支持所有格量​​词时,它只是失败了。

于 2013-04-28T13:15:42.823 回答