正则表达式中不情愿量词的使用



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

".*?foo"
字符串 上的

"xfooxxxxxxfoo"

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

此外,既然对所有格量词的解释也不够充分,谁能解释一下为什么正则表达式

".*+foo"

在同一个字符串上不匹配任何东西?

教程页面上"贪婪、不情愿和所有格量词的区别"一节的描述在我看来非常清楚。你哪部分不明白?

回答您的具体问题:

  • 对于模式".*?foo",不情愿量词(.*?)首先没有捕获任何东西;模式的其余部分(foo)无法匹配。匹配回到不情愿量词,然后抓住一个字符(x);然后图案的其余部分就匹配了。然后整个模式再次开始(在第一个"foo"之后),直到它抓住第二个foo之前的所有x字符才匹配,此时它有第二个匹配。

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

相关内容

  • 没有找到相关文章

最新更新