Skip to content

Latest commit

 

History

History
113 lines (88 loc) · 2.8 KB

正则表达式分组.md

File metadata and controls

113 lines (88 loc) · 2.8 KB

分组

在正则表达式中使用()进行分组。()中匹配到的规则为一组。

JAVA中,默认分组0为整个表达式。其余子分组下标从1开始。

分组嵌套下标规则

在多个分组嵌套的正则表达式中。下标的计算规则为:从左到右,从外到内,遇内则进。

比如我们有这样一种正则表达式((()())())()。为了更直观的表达式,换下符号:{[()()][]}{}

这是三层嵌套结果。那么下标和分组的对对应关系如下:

下标 分组符号
0 {[()()][]}{}
1 左边的{}
2 左边的[]
3 左边的()
4 右边的()
5 右边的[]
6 右边的{}

JAVA 代码实现。

一层分组

    /**
     * 分组获取
     * @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