捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.组零始终代表整个表达式。
形如(A)(B(C))
的表达式,分组顺序如下
1 ((A)(B(C)))
2 (A)
3 (B(C))
4 (C)
例子:
Pattern p = Pattern.compile("(\\d{4})-((\\d{2})-(\\d{2}))");
Matcher m = p.matcher("2021-02-04");
m.find();
System.out.println(m.group(0));//正则的全部
System.out.println(m.group(1));//(\d{4})部分
System.out.println(m.group(2));//((\d{2})-(\d{2}))部分
System.out.println(m.group(3));//(\d{2})部分
System.out.println(m.group(4));//(\d{2})部分
可以给每个分组取个别名
Pattern p = Pattern.compile("(?<year>\\d{4})-(?<monthDay>(?<month>\\d{2})-(?<day>\\d{2}))");
Matcher m = p.matcher("2021-02-04");
m.find();
System.out.println(m.group(0));//正则的全部
System.out.println(m.group("year"));//(\d{4})部分
System.out.println(m.group("monthDay"));//((\d{2})-(\d{2}))部分
System.out.println(m.group("month"));//(\d{2})部分
System.out.println(m.group("day"));//(\d{2})部分
https://www.runoob.com/w3cnote/java-capture-group.html