在正则表达式中使用()
进行分组。()
中匹配到的规则为一组。
在JAVA
中,默认分组0
为整个表达式。其余子分组下标从1
开始。
在多个分组嵌套的正则表达式中。下标的计算规则为:从左到右,从外到内,遇内则进。
比如我们有这样一种正则表达式((()())())()
。为了更直观的表达式,换下符号:{[()()][]}{}
。
这是三层嵌套结果。那么下标和分组的对对应关系如下:
下标 | 分组符号 |
---|---|
0 | {[()()][]}{} |
1 | 左边的{} |
2 | 左边的[] |
3 | 左边的() |
4 | 右边的() |
5 | 右边的[] |
6 | 右边的{} |
/**
* 分组获取
* @param regex 正则表达式
* @param input 输入
*/
public static void group(String regex, String input) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String group = matcher.group();
String chines = matcher.group(1);
String math = matcher.group(2);
String english = matcher.group(3);
System.out.println(group);
System.out.println(chines);
System.out.println(math);
System.out.println(english);
}
}
public static void main(String[] args) {
String regex = "语文:(\\d+), 数学:(\\d+), 英语:(\\d+)";
String input = "小明在这次考试的成绩为:语文:100, 数学:99, 英语:88";
group(regex, input);
}
代码执行结果为:
语文:100, 数学:99, 英语:88
100
99
88
/**
* 分组获取
* @param regex 正则表达式
* @param input 输入
*/
public static void group(String regex, String input) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String group = matcher.group();
String group1 = matcher.group(1);
String group2 = matcher.group(2);
String group3 = matcher.group(3);
String group4 = matcher.group(4);
System.out.println(group);
System.out.println(group1);
System.out.println(group2);
System.out.println(group3);
System.out.println(group4);
}
}
public static void main(String[] args) {
String regex = "a(a(e)?(e)?+b)(cc)+";
String input = "aaebcc";
group(regex, input);
}
代码执行结果:
aaebcc
aeb
e
null
cc