直接来自这个java API:
公共布尔要求结束()
如果更多输入可以将正匹配变为负匹配,则返回 true。
如果此方法返回 true 并找到匹配项,则更多输入可能会导致匹配项丢失。如果此方法返回 false 并找到匹配项,则更多输入可能会更改匹配项,但匹配项不会丢失。如果未找到匹配项,则 requireEnd 没有任何意义。
返回:如果更多输入可以将正匹配变为负匹配,则返回 true。
我无法在网上找到任何具体的例子。
有人可以给我看一个使用它的例子吗?提前致谢。
让我们举这个简单的例子:
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
仍然会被正则表达式引擎匹配。
requireEnd()
, 是一种匹配器方法,主要用于构建扫描仪。
此方法仅在成功匹配后才有意义,它指示正则表达式引擎是否依赖输入结束的位置来实现该成功。如果requireEnd
返回true
,则额外的输入可能导致尝试失败。如果它返回false
,额外的输入可能会改变成功的细节,但不能将成功变成失败。
它的常见应用是,如果requireEnd
为真,您应该在对输入做出决定之前接受更多输入。
示例:
1.正则表达式:\d+\b | [><]=?
文本: '1234' 匹配: ' 1234 '
requireEnd()
:真
2.正则表达式:\d+\b | [><]=?
文本: '>=' 匹配: ' >= '
requireEnd()
:假
所以一般来说,这个方法的return
值true
意味着,在做出明确的决定之前需要更多的输入。
例如,如果当前输入(例如,用户在交互式调试器中键入的字符)是单个字符 '<',最好等一下,看看下一个字符是否是 '=',这样你就可以正确地判断下一个标记应该是LESS_THAN
or LESS_THAN_OR_EQUAL
。