正则表达式是用来匹配文本中特定模式的工具。在正则表达式中,可以使用分组来组合多个表达式并对其进行操作。分组可以将多个字符视为一个单元,并对它们进行匹配、重复、替换等操作。

一、分组的概念和语法
分组是将多个字符组合在一起,并对它们进行操作的方式。在正则表达式中,使用括号来表示一个分组。括号内的表达式可以是任意合法的正则表达式。

语法格式如下:

    
        (expression)
    

二、分组的作用
1. 子表达式的匹配
使用分组后,可以将多个字符作为一个整体进行匹配。例如,正则表达式`(ab)+`可以匹配连续出现的"ab",如"ab"、"abab"、"ababab"等。

2. 子表达式的重复
分组可以用来对子表达式进行重复操作。可以使用量词对整个子表达式进行重复匹配。例如,正则表达式`(abc){2,4}`表示匹配连续出现2至4次的"abc",如"abcabc"、"abcabcabc"等。

3. 子表达式的捕获
通过使用分组,可以将符合分组条件的部分捕获到一个变量中,以便后续的操作。例如,正则表达式`I love (regex)`可以匹配"I love regex",并将"regex"捕获到一个变量中供后续使用。

三、分组的示例
下面通过几个示例来说明分组的用法:

1. 匹配重复的单词

    
        import java.util.regex.*;

        public class Main {
          public static void main(String[] args) {
            String regex = "\\b(\\w+)\\b\\s+\\1\\b";
            String input = "hello hello world";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(input);
            while (matcher.find()) {
              System.out.println("重复的单词:" + matcher.group());
            }
          }
        }
    

运行结果:
重复的单词:hello

2. 提取HTML标签内容

    
        import java.util.regex.*;

        public class Main {
          public static void main(String[] args) {
            String regex = "<(\\w+)>(.+?)";
            String input = "

标题

段落

"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input); while (matcher.find()) { System.out.println("标签名:" + matcher.group(1)); System.out.println("内容:" + matcher.group(2)); } } }

运行结果:
标签名:h1
内容:标题
标签名:p
内容:段落

3. 替换字符串

    
        import java.util.regex.*;

        public class Main {
          public static void main(String[] args) {
            String regex = "(\d{4})-(\d{2})-(\d{2})";
            String input = "2020-01-01";
            String replacement = "$2/$3/$1";
            String result = input.replaceAll(regex, replacement);
            System.out.println("替换后的字符串:" + result);
          }
        }
    

运行结果:
替换后的字符串:01/01/2020

以上是正则表达式分组的示例和使用方法。分组可以将多个字符视为一个整体进行操作,如匹配、重复、替换等。通过使用括号来表示一个分组,可以对子表达式进行操作,并将匹配到的部分捕获到变量中供后续使用。