Pattern和Matcher是Java正则操作核心类,Pattern通过compile编译正则式,Matcher执行匹配;支持find、matches、lookingAt等方法及分组捕获,可高效处理文本提取与验证。

在Java中,Pattern 和 Matcher 是正则表达式操作的核心类,位于 java.util.regex 包中。它们提供了比 String 类中 matches() 方法更强大、灵活的文本匹配能力。
Pattern:编译正则表达式模式
Pattern 类表示一个已编译的正则表达式。它不能通过构造函数创建实例,而是通过静态方法 compile() 来生成 Pattern 对象。
常用方式如下:
Pattern pattern = Pattern.compile("\\d+"); // 匹配一个或多个数字compile 方法有两个重载版本:
立即学习“Java免费学习笔记(深入)”;
- Pattern.compile(String regex):普通编译
- Pattern.compile(String regex, int flags):支持标志位,如忽略大小写(Pattern.CASE_INSENSITIVE)等
Matcher:执行匹配操作
Matcher 是一个引擎,用于对输入字符串执行匹配操作。通过 Pattern 的 matcher() 方法创建 Matcher 实例。
String input = "年龄是25岁"; Matcher matcher = pattern.matcher(input);Matcher 提供多种匹配方式:
- matches():判断整个字符串是否完全匹配该正则
- find():查找字符串中是否有子序列匹配正则(常用于提取)
- lookingAt():从字符串开头开始匹配,不要求匹配整个字符串
示例:使用 find() 提取所有数字
Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher("张三今年18岁,月薪5000元"); while (matcher.find()) { System.out.println("找到数字: " + matcher.group()); } // 输出: // 找到数字: 18 // 找到数字: 5000分组与捕获数据
正则中的括号 () 表示分组,Matcher 可以通过 group() 方法获取匹配的子串。
例如,提取姓名和电话:
String text = "联系人:李四,电话:13812345678"; Pattern pattern = Pattern.compile("联系人:(\\w+),电话:(\\d+)"); Matcher matcher = pattern.matcher(text); if (matcher.find()) { System.out.println("姓名: " + matcher.group(1)); // 第一个分组 System.out.println("电话: " + matcher.group(2)); // 第二个分组 }注意:group(0) 表示整个匹配结果,group(1) 开始为第一个括号内的内容。
常见实用技巧
- 使用 Pattern.quote() 转义特殊字符,避免正则元字符被解析
- 设置标志位实现忽略大小写:Pattern.CASE_INSENSITIVE
- 多行匹配时使用 Pattern.MULTILINE
- 预编译 Pattern 可提升性能,尤其在循环中重复使用时
基本上就这些。掌握 Pattern 和 Matcher 后,你可以处理大多数文本分析任务,比如验证邮箱、提取日志信息、替换敏感词等。关键是理解正则语法和匹配方法的区别,合理选择 find、matches 或 lookingAt。不复杂但容易忽略细节,建议多写测试用例验证逻辑。










