1. 程式人生 > >java正則中的requireEnd和hitEnd

java正則中的requireEnd和hitEnd

java req rst imp logs 表示 import 導致 分析

  

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