Java中正则表达式Matcher类的matches(), lookAt()和find()的区别

在Matcher类中的matches, lookingAt和find都是匹配目标的方法,但容易混淆,整理它们的区别如下:

  • matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回False。但如果前部分匹配成功,将移动下次匹配的位置。

  • lookingAt: 部分匹配,总是从第一个字符进行匹配,匹配成功了不再继续匹配,匹配失败了,也不继续匹配。

  • find:部分匹配,从当前位置开始匹配,找到一个匹配的子串,将移动下次匹配的位置。

  • reset:给当前的Matcher对象配上个新的目标,目标就是该方法的参数;如果不给参数,reset会把Matcher设到当前字符串的开始处。使用示例代码来展示他们的区别更清晰明了:

    @org.junit.Test
    public void test29() {
        Pattern pattern = Pattern.compile("\\d{3,5}");
        String charSequence = "123-34345-234-00";
        Matcher matcher = pattern.matcher(charSequence);

        System.out.println(matcher.matches());    // false

        System.out.println(matcher.find());        // true
        System.out.println(matcher.group());    // 34345
        System.out.println(matcher.start());    // 4

        matcher.reset();                        // 当前的位置置为0

        System.out.println(matcher.find());        // true
        System.out.println(matcher.group() + " - " + matcher.start() + " - " + matcher.end());        //123 - 0 - 3
        System.out.println("------------");

        System.out.println(matcher.find());        // true
        System.out.println(matcher.group() + " - " + matcher.start());        //34345 - 4



        System.out.println(matcher.lookingAt());    // true
        System.out.println(matcher.group() + "---" + matcher.start());        //123--0

        System.out.println(matcher.lookingAt());    //true
        System.out.println(matcher.group() + "---" + matcher.start());        //123--0
    }

results matching ""

    No results matching ""