/**
* @author
* @version v1.0
* @description 非贪婪匹配
* @date 2020/1/10
*/
public class RegexTest {
public static void main(String[] args) {
/**
*
* 第一组数:123000 第二组数:
* 第一组数:10100 第二组数:
* 第一组数:1001 第二组数:
*
*/
matchForZero("123000");
matchForZero("10100");
matchForZero("1001");
/**
* 第一组数:123 第二组数:000
* 第一组数:101 第二组数:00
* 第一组数:1001 第二组数:
*/
matchForMoreZero("123000");
matchForMoreZero("10100");
matchForMoreZero("1001");
/**
* 第一组数: 第二组数:9999
*/
matchForZeroV("9999");
}
/**
* 正则表达式默认使用贪婪匹配,尽可能多的向后匹配
* @param s
*/
public static void matchForZero(String s){
Pattern pattern = Pattern.compile("(\\d+)(0*)$");
Matcher matcher = pattern.matcher(s);
if (matcher.matches()){
System.out.print("第一组数:"+matcher.group(1)+"\t");
System.out.println("第二组数:"+matcher.group(2));
}
}
/**
* 非贪婪匹配
* \d尽可能少的匹配,0尽可能多的匹配,且以0结尾
* @param s
*/
public static void matchForMoreZero(String s){
Pattern pattern = Pattern.compile("(\\d+?)(0*)$");
Matcher matcher = pattern.matcher(s);
if (matcher.matches()){
System.out.print("第一组数:"+matcher.group(1)+"\t");
System.out.println("第二组数:"+matcher.group(2));
}
}
/**
* ?既能表示非贪婪匹配,也能表示0个或1个,所以要注意其含义
* @param s
*/
public static void matchForZeroV(String s){
Pattern pattern = Pattern.compile("(\\d??)(9*)$");
//第一个?表示0个或1个,可以匹配0或1个9
//第二个?表示非贪婪匹配,尽可能少的匹配,两者综合,即匹配0个
Matcher matcher = pattern.matcher(s);
if (matcher.matches()){
System.out.print("第一组数:"+matcher.group(1)+"\t");
System.out.println("第二组数:"+matcher.group(2));
}
}
}