【问题标题】:Use of reluctant quantifier in regex在正则表达式中使用不情愿的量词
【发布时间】:2013-04-28 12:52:13
【问题描述】:

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

".*?foo"

在字符串上

"xfooxxxxxxfoo"

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

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

".*+foo"

在同一个String上什么都不匹配?

【问题讨论】:

  • 有很全面的解释in this tutorial。和here is the part on possessive quantifiers。我不记得这两页之前的章节有多少需要你阅读,但值得一试。如果您对某些解释感到困惑,我实际上建议您阅读整个教程。在我看来,这一切都非常清楚且解释清楚。

标签: java regex reluctant-quantifiers


【解决方案1】:

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

回答您的具体问题:

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

    李>
  • 对于模式 (".*+foo"),所有格量词 (.*+) 获取所有可能的输入(因为 "." 匹配任何内容)并且没有任何剩余内容可以匹配 @987654331 @ 部分模式。因为".*+"是所有格,它不会回馈任何东西;因此,与贪心量词不同,当匹配到所有格量词时,它就会失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2023-01-16
    相关资源
    最近更新 更多