java
主页 > 软件编程 > java >

java正则表达式匹配Matcher类的使用

2025-02-04 | 佚名 | 点击:

Matcher 类 用法

在 Java 中,Matcher 类是用于匹配正则表达式的工具,而 group() 方法是 Matcher 类中的一个重要方法,用于提取匹配结果中的捕获组(captured groups)。以下是对 group() 方法的详细解释:

1. 正则表达式中的捕获组

在正则表达式中,捕获组是通过圆括号 () 定义的。每个 () 内的子表达式都是一个捕获组,匹配的内容可以被单独提取。

例如:

1

String regex = "(\\d{2})-(\\d{2})-(\\d{4})";

这个正则表达式匹配日期格式(如 12-31-2023),其中:

2. Matcher 类的作用

Matcher 类用于对输入字符串进行正则表达式匹配。它通过 Pattern 类的 matcher() 方法创建。

示例:

1

2

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

Matcher matcher = pattern.matcher("12-31-2023");

3. group() 方法的作用

group() 方法用于提取匹配结果中的捕获组。它有几种重载形式:

(1) group()

示例:

1

2

3

if (matcher.find()) {

    System.out.println(matcher.group()); // 输出 "12-31-2023"

}

(2) group(int group)

示例:

1

2

3

4

5

if (matcher.find()) {

    System.out.println(matcher.group(1)); // 输出 "12"(月份)

    System.out.println(matcher.group(2)); // 输出 "31"(日期)

    System.out.println(matcher.group(3)); // 输出 "2023"(年份)

}

(3) group(String name)(Java 7+)

示例:

1

2

3

4

5

6

7

8

Pattern pattern = Pattern.compile("(?<month>\\d{2})-(?<day>\\d{2})-(?<year>\\d{4})");

Matcher matcher = pattern.matcher("12-31-2023");

 

if (matcher.find()) {

    System.out.println(matcher.group("month")); // 输出 "12"

    System.out.println(matcher.group("day"));   // 输出 "31"

    System.out.println(matcher.group("year"));  // 输出 "2023"

}

4. group() 方法的使用步骤

示例:

1

2

3

4

5

6

if (matcher.find()) {

    String month = matcher.group(1); // "12"

    String day = matcher.group(2);   // "31"

    String year = matcher.group(3);  // "2023"

    System.out.println("Month: " + month + ", Day: " + day + ", Year: " + year);

}

5. 注意事项

6. 完整示例

以下是一个完整的示例,演示如何使用 group() 方法提取捕获组:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

public class RegexExample {

    public static void main(String[] args) {

        String input = "Date: 12-31-2023, Time: 23:59";

        String regex = "(\\d{2})-(\\d{2})-(\\d{4}).*?(\\d{2}):(\\d{2})";

        Pattern pattern = Pattern.compile(regex);

        Matcher matcher = pattern.matcher(input);

 

        if (matcher.find()) {

            System.out.println("Month: " + matcher.group(1)); // "12"

            System.out.println("Day: " + matcher.group(2));   // "31"

            System.out.println("Year: " + matcher.group(3));  // "2023"

            System.out.println("Hour: " + matcher.group(4));  // "23"

            System.out.println("Minute: " + matcher.group(5));// "59"

        } else {

            System.out.println("No match found!");

        }

    }

}

总结

find() 和 matches() 方法的区别

1. matches() 方法

2. find() 方法

3. find() 和 matches() 的区别

特性 matches() find()
匹配范围 整个字符串必须完全匹配正则表达式。 字符串中只要包含匹配的子串即可。
返回值 true 或 false。 true 或 false。
多次调用 每次调用都检查整个字符串。 每次调用查找下一个匹配的子串。
适用场景 验证字符串是否符合某种格式。 提取字符串中符合某种模式的子串。
原文链接:
相关文章
最新更新