zoukankan      html  css  js  c++  java
  • java正则中的requireEnd和hitEnd

      

    package test;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class main
    {
    
        // hitEnd(),结果为true,末尾输入更多数据,是否改变匹配结果 1.true变false 2.false变true 3.匹配文本变化
        // 返回false,匹配结果已经确定,包括为本确定
        // requireEnd(),只有匹配成功有意义,为true,表示更多输入数据可能会导致失败,false 输入更多,可能改变匹配文本,但不会失败
        public static void main(String[] args)
        {
            String[] matcherStrs =
            { "1234", "1234.>.567", ">", ">.567", ">=", ">=.567", "oops" };
            Pattern pattern = Pattern.compile("\d+\b|[><]=?");
            Matcher m = null;
            for (String matcherStr : matcherStrs)
            {
                m = pattern.matcher(matcherStr);
                boolean find_result = true;
                if (find_result = m.find())
                {
                    System.out.println(String.format("正则是%s,匹配文本是%s,匹配是否成功:%s,匹配结果是%s", m.pattern(), matcherStr,
                            find_result, find_result ? m.group() : "匹配失败"));
                    System.out.println("hitEnd() is " + m.hitEnd());
                    System.out.println("requireEnd() is " + m.requireEnd());
    
                }
            }
    
        }
    }

    结果分析:

    正则是d+|[><]=?,匹配文本是1234,匹配是否成功:true,匹配结果是1234
    hitEnd() is true//如果结尾加5,文本变化,加a,匹配失败,所以hitEnd为true
    requireEnd() is true//加a,导致失败
    正则是d+|[><]=?,匹配文本是1234.>.567,匹配是否成功:true,匹配结果是1234
    hitEnd() is false //1234已经确定了,和结尾无关,false
    requireEnd() is false //不会导致失败
    正则是d+|[><]=?,匹配文本是>,匹配是否成功:true,匹配结果是>
    hitEnd() is true //加=,匹配文本变化
    requireEnd() is false//加=文本变化,但不会失败,所以false
    正则是d+|[><]=?,匹配文本是>.567,匹配是否成功:true,匹配结果是>
    hitEnd() is false //>不是末尾,已经确定成功
    requireEnd() is false//确定成功
    正则是d+|[><]=?,匹配文本是>=,匹配是否成功:true,匹配结果是>=
    hitEnd() is false //?是0-1,不会改变结果
    requireEnd() is false//不会失败
    正则是d+|[><]=?,匹配文本是>=.567,匹配是否成功:true,匹配结果是>=
    hitEnd() is false //不在结尾
    requireEnd() is false //不在结尾

    首先看匹配结果是否在结尾

  • 相关阅读:
    kubernetes 【版本】
    【pod无法删除 总是处于terminate状态】强行删除pod
    prometheus数据格式
    【prometheus 抓取源】
    【PromQL】prometheus查询语言
    【grafana报错】Singlestat "Error: Multiple Series Error"
    【prometheus抓取间隔】scrape_interval
    【分布式一致性】etcd
    【kubectl 原理】kubectl 命令执行的时候究竟发生了什么(kubectl、apiserver、etcd)
    中国移动DNS IP地址大全(32个省)
  • 原文地址:https://www.cnblogs.com/ptqueen/p/7039522.html
Copyright © 2011-2022 走看看