澄清有关requireEnd匹配器的方法

问题描述:

直接从this的Java API:澄清有关requireEnd匹配器的方法

公共布尔requireEnd()

返回true,如果更多的输入可以改变一个积极的比赛拖入 负值。

如果该方法返回true,并且找到匹配,那么更多的输入 可能导致匹配丢失。如果此方法返回false且发现匹配,则更多输入可能会更改匹配,但匹配 不会丢失。如果找不到匹配,那么requireEnd就没有 的含义。

返回: 真当且仅当更多的输入可以改变一个正匹配成负值。

我一直没能找到上线的任何具体的例子。

有人能告诉我它的使用的例子吗? 在此先感谢。

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

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仍然会由正则表达式引擎匹配。

+0

所以基本上它只是检查是否有在模式的末尾是$? – Rollerball

+0

不仅是'$';导致匹配在最后被限制的锚的任何组合。例如,单词锚或前瞻。 – fge

requireEnd()

,是其主要用于建筑扫描器一个匹配方法。
该方法仅在成功匹配之后有意义,指示发动机是否依靠输入末尾的位置来实现该成功。如果requireEnd返回true,额外的输入可能导致尝试失败。如果它返回false,则额外的输入可能会改变成功的细节,但不能将成功转化为失败

其常见的应用是,如果requireEnd是真的,你应该在提交的关于输入决定之前,接受更多的投入。

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

所以在一般情况下,从该方法的一个truereturn值意味着,明确的决定可以由之前更多的输入是必需的。例如,如果当前输入(例如用户在交互式调试器中键入的字符)是单个字符“<”,最好等待下一个字符是否为'=',以便您可以正确决定下一个令牌应该是LESS_THAN还是LESS_THAN_OR_EQUAL

+0

你可能已经提到你从哪里得到这些... http://www.tzlink.com/tool/Mastering_Regular_Expressions_3rd/0596528124/regex3-CHP-8-SECT-4.html – fge