2

直接来自这个java API:

公共布尔要求结束()

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

如果此方法返回 true 并找到匹配项,则更多输入可能会导致匹配项丢失。如果此方法返回 false 并找到匹配项,则更多输入可能会更改匹配项,但匹配项不会丢失。如果未找到匹配项,则 requireEnd 没有任何意义。

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

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

有人可以给我看一个使用它的例子吗?提前致谢。

4

2 回答 2

2

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

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"then.requireEnd()将返回false: 与上面的输入,cat仍然会被正则表达式引擎匹配。

于 2013-07-13T14:23:57.397 回答
1

requireEnd(), 是一种匹配器方法,主要用于构建扫描仪。
此方法仅在成功匹配后才有意义,它指示正则表达式引擎是否依赖输入结束的位置来实现该成功。如果requireEnd返回true,则额外的输入可能导致尝试失败。如果它返回false,额外的输入可能会改变成功的细节,但不能将成功变成失败

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

示例:
1.正则表达式\d+\b | [><]=? 文本: '1234' 匹配: ' 1234 '
requireEnd():真
2.正则表达式\d+\b | [><]=? 文本: '>=' 匹配: ' >= '
requireEnd():假

所以一般来说,这个方法的returntrue意味着,在做出明确的决定之前需要更多的输入

例如,如果当前输入(例如,用户在交互式调试器中键入的字符)是单个字符 '<',最好等一下,看看下一个字符是否是 '=',这样你就可以正确地判断下一个标记应该是LESS_THANor LESS_THAN_OR_EQUAL

于 2013-07-12T16:02:23.530 回答