【问题标题】:Pattern matcher using Greedy and Reluctant使用贪婪和不情愿的模式匹配器
【发布时间】:2014-04-18 09:56:59
【问题描述】:

在 java regex 中,我读过关于 Greedy and Reluctant Quantifiers 的信息。他们提到了

一个不情愿或“非贪婪”的量词首先匹配最少 可能的。所以 .* 一开始什么都不匹配,留下整个 字符串不匹配

在这个例子中

来源:yyxxxyxx
模式:.*xx

贪婪量词* 并产生

0 yyxxxyxx

不情愿的限定词*?,我们得到以下信息:

0 yyxx
4 xyxx

为什么yxxyxx的结果即使是最小的可能值也不可能?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    正则表达式引擎返回它找到的第一个和最左边的匹配项。

    基本上它会尝试从第一个字符开始匹配模式。如果没有找到对应的匹配,则传输跳入并从第二个字符开始重试,以此类推。

    如果您在bab 上使用a+?b,它将首先从第一个b 尝试。这不起作用,所以我们从第二个字符开始尝试。

    但在这里它从第一个字符开始找到匹配项。从第二个开始甚至不考虑,我们找到了一个匹配所以我们返回。

    如果您在aab 上应用a+?b,我们会尝试第一个a 并找到一个整体匹配:故事结束,没有理由尝试其他任何事情。

    总结:正则表达式引擎是从左到右的,所以懒惰只能影响右边的长度。

    【讨论】:

      猜你喜欢
      • 2010-11-09
      • 2012-11-17
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 2011-08-29
      • 2011-05-04
      • 2013-06-09
      相关资源
      最近更新 更多