Java正则分组匹配

正则表达式是一种强大的工具,用于在字符串中查找、匹配和替换模式。在Java中,我们可以使用java.util.regex包中的类来使用正则表达式。其中,正则分组匹配是一种常见的用法。

本文将介绍正则表达式和正则分组匹配的基本概念,并通过代码示例来展示如何在Java中使用正则分组匹配。

正则表达式基础

正则表达式是一种由字符和特殊字符组成的序列,用于定义字符串的模式。我们可以使用正则表达式来检查一个字符串是否匹配某种模式,或者从字符串中提取特定的内容。

在Java中,使用正则表达式需要先创建一个Pattern对象,然后使用该对象来创建一个Matcher对象。Matcher对象可以用于在字符串中搜索、匹配和替换模式。

下表列出了一些常见的正则表达式特殊字符和它们的含义:

字符 含义
. 任意字符(除了换行符)
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
\d 数字
\w 字母、数字或下划线
\s 空白字符
^ 字符串的开始
$ 字符串的结束

正则分组匹配

正则分组匹配是一种用于从一个字符串中提取子字符串的技术。我们可以使用一对圆括号()来定义一个分组,然后使用Matcher对象的group(int group)方法来获取匹配的分组。

下面是一个示例,展示了如何使用正则分组匹配来提取一个字符串中的日期信息:

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String text = "Today is 2022-01-01, tomorrow is 2022-01-02.";

        Pattern pattern = Pattern.compile("(\\d{4}-\\d{2}-\\d{2})");
        Matcher matcher = pattern.matcher(text);

        while (matcher.find()) {
            String date = matcher.group(1);
            System.out.println(date);
        }
    }
}

在上面的代码中,我们使用了一个正则表达式"(\d{4}-\d{2}-\d{2})"来匹配字符串中的日期信息。其中,"\d{4}"表示匹配4个数字,"\d{2}"表示匹配2个数字。通过Pattern对象的compile方法,将正则表达式编译为一个Pattern对象。然后,通过Matcher对象的find方法,查找字符串中匹配正则表达式的子串。最后,通过Matcher对象的group方法,获取匹配的分组。

运行上面的代码,输出结果为:

2022-01-01
2022-01-02

正则分组匹配可以更灵活地提取字符串中的内容。我们可以定义多个分组,并使用Matcher对象的group(int group)方法指定要获取的分组。

接下来,我们将通过更多的示例来展示正则分组匹配的用法。

示例1:提取URL中的域名和路径

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String url = "

        Pattern pattern = Pattern.compile("(https?)://([^/]+)(/.*)");
        Matcher matcher = pattern.matcher(url);

        if (matcher.matches()) {
            String protocol = matcher.group(1);
            String domain = matcher.group(2);
            String path = matcher.group(3);

            System.out.println("Protocol: " + protocol);
            System.out.println("Domain: " + domain);
            System.out.println("Path: " + path);
        }
    }
}

在上面的代码中,我们使用正则表达式"(https?)://([^/]+)(/.)"来匹配URL字符串中的协议、域名和路径。其中,"(https?)"表示匹配"http"或"https","([^/]+)"表示匹配除了斜杠"/"之外的任意字符,"(/.)"表示匹配斜