澄清requireEnd Matcher的方法

时间:2013-07-12 15:46:25

标签: java regex methods

直接来自this java API:

  

public boolean requireEnd()

     

如果更多输入可以将正匹配更改为a,则返回true   消极的。

     

如果此方法返回true,并且找到匹配项,则输入更多   可能导致比赛失败。如果此方法返回false和a   匹配被找到,然后更多的输入可能会改变匹配但匹配   不会丢失。如果未找到匹配项,则requireEnd没有   含义。

     

返回:       如果更多输入可以将正匹配更改为负匹配,则为true。

我无法在线找到任何具体的例子。

有人可以告诉我一个使用它的例子吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

requireEnd()是一种匹配方法,主要用于构建扫描仪 此方法仅在成功匹配后才有意义,表示正则表达式引擎是否依赖于输入结尾的位置来实现成功。如果requireEnd返回true,则其他输入可能导致尝试失败。如果它返回false,则其他输入可能会更改成功的详细信息,但无法将成功转为失败

它的常见应用是,如果requireEnd为真,则在决定输入之前应该接受更多输入。

例:
1. 正则表达式\d+\b | [><]=? 文字:'1234'匹配:' 1234 < /强>'
requireEnd():是的 2. 正则表达式\d+\b | [><]=? 文字:'&gt; ='匹配:' &gt; = < / EM> '
requireEnd():错误

因此,一般来说,此方法的return值为true意味着,在做出明确决定之前需要更多输入

例如,如果当前输入(例如,用户在交互式调试器中键入的字符)是单个字符'&lt;',则最好等待查看下一个字符是否为'=',以便您可以正确决定下一个令牌应该是LESS_THAN还是LESS_THAN_OR_EQUAL

答案 1 :(得分:1)

让我们举一个简单的例子:

public static void main(final String... args)
{
    final Pattern p = Pattern.compile("cat$");

    final Matcher m = p.matcher("I have a cat");
    m.find(); // finds a match
    System.out.println(m.requireEnd()); // prints true
}

正则表达式最后有一个锚点;文件说,如果给出更多的输入,它“[...]可能导致比赛失败”。确实。考虑这个输入:

"I have a catflap"

正则表达式在这里不再匹配:匹配丢失。

如果现在我们将"cat$"替换为"cat",则.requireEnd()会返回false:通过上面的输入,cat仍会与正则表达式引擎匹配