Discuss / Java / 非贪婪匹配,是在保证后面的表达式都能匹配上的前提下尽可能少匹配

非贪婪匹配,是在保证后面的表达式都能匹配上的前提下尽可能少匹配

Topic source

Loading...

#1 Created at ... [Delete] [Delete and Lock User]

非贪婪匹配,是在保证后面的表达式都能匹配上的前提下尽量少匹配!

        Pattern pattern = Pattern.compile("(\\d+?)(0*)");
        Matcher matcher = pattern.matcher("1230000");
        if (matcher.matches()) {
            System.out.println("group1=" + matcher.group(1)); // "123"
            System.out.println("group2=" + matcher.group(2)); // "0000"
        }

正则里面(\\d+?)实际上可以匹配一个或多个数字,匹配1的时候后面230000和(0*)就匹配不上了,同理匹配12的时候也不能满足,至少匹配123,后面(0*)才能匹配上。这样既保证了pattern.matcher("1230000").matches()返回true,又分好了组,不会出现贪婪匹配出现空串的情况。


  • 1

Reply