首页 > 代码库 > java正则中的requireEnd和hitEnd

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

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

 

java正则中的requireEnd和hitEnd