• 周五. 10 月 11th, 2024

    架构师之路(八)之JAVA正则中matches、find、lookingAt用法区别

    root

    2 月 21, 2021 #架构师之路

    引言

        JAVA正则的用法在整个java体系非常普遍,一些很常用的匹配方法必须要掌握,至少得理解其原理,否则接下来的路会很难走。

    背景介绍

    JAVA正则表达式中,Match的匹配取值有以下几种,其含义

    序号方法及说明
    1public boolean lookingAt()
     尝试将从区域开头开始的输入序列与该模式匹配。
    2public boolean find()
    尝试查找与该模式匹配的输入序列的下一个子序列。
    3public boolean find(int start
    重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。
    4public boolean matches()
    尝试将整个区域与模式匹配。

     案例说明

        上面的简介介绍的挺详细,说的也很全乎,但依旧糊里糊涂,还是不懂。下面直接拿例子说话,将用大白话解释着三者的区别,方便以后的理解以及

    使用:

    public static void main(String[] args) {
        String regex = "\\d{3,5}";
        Pattern pattern = Pattern.compile(regex);
        String charSequence = "123-34345-234-00";
        Matcher matcher = pattern.matcher(charSequence);
    
        //虽然匹配失败,但由于charSequence里面的"123"和pattern是匹配的,所以下次的匹配从位置4开始
        print("是否匹配:"+matcher.matches());
        //测试匹配位置
        matcher.find();
        print("匹配开始位置"+matcher.start());
    
        //使用reset方法重置匹配位置
        print("重置匹配位置:"+matcher.reset());
    
        //第一次find匹配以及匹配的目标和匹配的起始位置
        print(matcher.find());
        print("第一次find匹配以及匹配的目标和匹配的起始位置:"+matcher.group()+" - "+matcher.start());
        //第二次find匹配以及匹配的目标和匹配的起始位置
        print(matcher.find());
        print("第二次find匹配以及匹配的目标和匹配的起始位置:"+matcher.group()+" - "+matcher.start());
    
        //第一次lookingAt匹配以及匹配的目标和匹配的起始位置
        print(matcher.lookingAt());
        print("第一次lookingAt匹配以及匹配的目标和匹配的起始位置:"+matcher.group()+" - "+matcher.start());
    
        //第二次lookingAt匹配以及匹配的目标和匹配的起始位置
        print(matcher.lookingAt());
        print("第二次lookingAt匹配以及匹配的目标和匹配的起始位置:"+matcher.group()+" - "+matcher.start());
    
    }
    
    public static void print(Object o){
        System.out.println(o);
    }

    将上述的执行结果打印如下:

    是否匹配:false
    匹配开始位置4
    重置匹配位置:java.util.regex.Matcher[pattern=\d{3,5} region=0,16 lastmatch=]
    true
    第一次find匹配以及匹配的目标和匹配的起始位置:123 – 0
    true
    第二次find匹配以及匹配的目标和匹配的起始位置:34345 – 4
    true
    第一次lookingAt匹配以及匹配的目标和匹配的起始位置:123 – 0
    true
    第二次lookingAt匹配以及匹配的目标和匹配的起始位置:123 – 0

    Process finished with exit code 0

    通过上述的例子,应该很简洁明了的说明三者的作用了吧?

    总结如下:

    1)matches:总是全词匹配,并且总是从下一个匹配位置开始匹配;

    2)find:总是部分匹配,如果匹配成功,将会从下一个匹配位置开始匹配;

    3) lookingAt:总是部分匹配,并且总是从起始位置开始匹配,跟matches类似,不过不需要全部匹配

    以上仅代表个人观点,如有错误的地方请各位小伙伴批评指正!

    root