在regex中使用不情愿的量词

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

".*?foo"

在一个字符串上

"xfooxxxxxxfoo"

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

而且,由于所有格量词的解释也不够,有人可以解释为什么正则表达式

".*+foo"

在相同的字符串不匹配任何东西?


在“贪心,不情愿和拥有量词之间的差异”一节的教程页面上的描述对我来说似乎很清楚。 你不了解什么部分?

回答你的具体问题:

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

  • 对于这个模式,( ".*+foo" ),占有量词( .*+ )获取所有可能的输入(因为"."匹配任何内容),并且没有任何剩余的匹配"foo"部分该模式。 因为".*+"是占有欲,它不会给任何回报; 因此,与贪婪量词不同,当匹配返回所有格量词时,它就会失败。

  • 链接地址: http://www.djcxy.com/p/76967.html

    上一篇: Use of reluctant quantifier in regex

    下一篇: What tools are there for debugging/stepping through a regular expression?