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 //不在结尾

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

时间: 2024-11-06 12:25:15

java正则中的requireEnd和hitEnd的相关文章

Java正则表达中Greedy Reluctant Possessive 的区别

上一篇文章<编程思想之正则表达式 >中讲了正则表达式的原理.使用方法和常见的正则表达式总结,本文将进一步探讨Java正则表达中Greedy.Reluctant.Possessive三种策略的区别. 从Java的官方文档http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html中我们可以看到,正则表达式表示数量词的符号有三套,分别是Greedy(贪婪的).Reluctant(勉强的)和Possessive(独占的).

正则中表示一个反斜线要使用四个反斜线

java中反斜线'\'通常和其他字符组合使用,我们有时候称它为转义字符 java代码里 要表示一个反斜线'\'就要写成:双斜线形式"\\",第一个反斜线代表转义,第二个可以看做普通字符 java中奇数个的反斜线不允许出现,除非后面有其他字符,那么最后一个反斜线就被当做了转义字符 正则中要表示一个反斜线就要使用四个反斜线表示"\\\\" 四个反斜线可理解为:前两个"生成"的 转义后两个"生成"的反斜杠.

java正则匹配

java正则提取需要用到Matcher类,下面给出案例示例供参考 需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A876X提取6import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test {public static void main(String[] args) {String s = "A876X";// 把要匹配的字符串写成正则表达式,然后要提取的字符使用括号括起来

关于JAVA正则匹配空白字符的问题(全角空格与半角空格)

今天遇到一个字符串,怎么匹配空格都不成功!!! 我把空格复制到test.properties文件 显示“\u3000” ,这是什么? 这是全角空格!!! 查了一下    \s    不支持全角 1."\s"匹配的是哪一种空格? 正则表达式中\s匹配任何空白字符,包括空格.制表符.换页符等等:中文全角空格 \s 并不能匹配中文全角空格. \s 只能匹配下面六种字符(详见 java.util.regex.Pattern 的 API DOC): 半角空格( ) 水平制表符(\t) 竖直制表符

Java正则速成秘籍(一)之招式篇

目录 导读 概述 Pattern类 Matcher类 校验文本是否与正则规则匹配 案例:lookingAt vs find vs matches 查找匹配正则规则的文本位置 案例:使用start().end().group() 查找所有匹配正则条件的子序列 替换匹配正则规则的文本 案例:replaceFirst vs replaceAll 案例:appendReplacement.appendTail和replaceAll 案例:quoteReplacement和replaceAll,解决特殊字

java 正则匹配提取html纯文本

本文来自于我的个人博客: java 正则匹配提取html纯文本 做内容的大家都知道,从html中直接提取纯文本是一个很大的问题,现将我做的正则匹配贴上: import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestReg { static String reg = "<[a-zA-Z]+.*?>([\s\S]*?)</[a-zA-Z]*>"; public st

Java语言中的正则表达式

正则表达式是什么? 正则表达式是一种强大而灵活的文本处理工具.初学正则表达式时,其语法是一个难点,但它确实是一种简洁.动态的语言.正则表达式提供了一种完全通用的方式,能够解决各种字符串处理相关的问题:匹配.选择.编辑以及验证.一般来说,正则表达式就是以某种方式来描述字符串. 日常例子 在文本中查找“halu126”,我们通常会在查找框中输入“halu126”,这就是一个最简单的正则表达式的例子,使用精确的匹配这样的字符串,如果我 们即想在文本中找到“halu126”,又想找到“Halu126”,

JAVA字符串中的转义字符 &quot; \ &quot;

在java字符串中如果出现斜杠,1.当成转义字符 " \ " 时,后面必须接八进制数字进行ASCII转义输出成其它字符,2.当成字符串斜杠直接输出时,必须用双斜杠 "\" 转义为单斜杠 ASCII参考八进制表:https://baike.baidu.com/item/ASCII/309296?fr=aladdin JAVA中比较特别的一点是:str.split("sep", limit)函数其第1个参数seperator分隔符字符串是要被正则解析

41 正则中匹配多个字符串匹配任意单个字符正则中使用字符串重复、可选和特殊字符

第三课 正则中匹配多个字符串 # 匹配多个字符串 # 择一匹配符号, | import re s = 'Python|Ruby|Java|Swift' m = re.match(s,'PythonRuby') print(m) # <re.Match object; span=(0, 6), match='Python'> m = re.search(s, 'I love Python.') print(m) # <re.Match object; span=(7, 13), match