【问题标题】:Clarification about requireEnd Matcher's method澄清 requireEnd Matcher 的方法
【发布时间】:2013-07-12 15:46:25
【问题描述】:

直接来自thisjava API:

public boolean requireEnd()

如果更多输入可以将正匹配变为 负数。

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

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

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

谁能给我看一个使用它的例子吗? 提前致谢。

【问题讨论】:

    标签: java regex methods


    【解决方案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 仍将被正则表达式引擎匹配。

    【讨论】:

    • 所以基本上它只是检查模式末尾是否有 $?
    • 不仅仅是$;导致匹配在最后有界的任何锚点组合。例如,单词锚点或前瞻。
    【解决方案2】:

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

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

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

    因此,一般而言,此方法中的return 值为true 意味着,需要更多输入才能做出明确的决定

    例如,如果当前输入(例如,用户在交互式调试器中输入的字符)是单个字符 'LESS_THAN 还是LESS_THAN_OR_EQUAL

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2017-04-12
    • 1970-01-01
    相关资源
    最近更新 更多