非贪婪匹配,是在保证后面的表达式都能匹配上的前提下尽量少匹配!
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,又分好了组,不会出现贪婪匹配出现空串的情况。
Sign in to make a reply
Loading...
非贪婪匹配,是在保证后面的表达式都能匹配上的前提下尽量少匹配!
正则里面(\\d+?)实际上可以匹配一个或多个数字,匹配1的时候后面230000和(0*)就匹配不上了,同理匹配12的时候也不能满足,至少匹配123,后面(0*)才能匹配上。这样既保证了pattern.matcher("1230000").matches()返回true,又分好了组,不会出现贪婪匹配出现空串的情况。