Matcher类是Java正则匹配核心工具,需通过Pattern.matcher()获取;matches()要求全串匹配,lookingAt()要求开头匹配,find()查找任意位置子串;group()等方法需匹配成功后调用;replaceAll()、replaceFirst()用于替换,reset()可复用Matcher。

Matcher类是Java正则表达式匹配的核心工具,它不直接创建,而是通过Pattern对象的matcher()方法获得。真正执行匹配逻辑、提取结果、替换文本等操作,都依赖Matcher实例。
Matcher必须配合Pattern使用
Pattern负责编译正则表达式,Matcher负责在目标字符串上执行具体匹配动作。没有Pattern,就没有合法的Matcher:
- 先用
Pattern.compile("正则串")得到Pattern对象 - 再调用
pattern.matcher("待匹配文本")获取Matcher - Matcher本身不能脱离Pattern独立构造(无public构造方法)
常用匹配方法的区别:matches()、lookingAt()、find()
这三个方法都返回boolean,但行为完全不同,容易混淆:
-
matches():要求整个输入字符串**完全匹配**正则(相当于正则前后隐含^和$) -
lookingAt():只要从**字符串开头**能匹配上一部分就返回true(不要求匹配到末尾) -
find():在字符串中**查找任意位置的子串匹配**,可多次调用找下一个匹配项
例如对字符串"abc123def456"和正则"\d+":
立即学习“Java免费学习笔记(深入)”;
-
matches()→ false(整串不是纯数字) -
lookingAt()→ false(开头不是数字) -
find()→ true(找到"123"),再调一次返回true(找到"456")
获取匹配结果:group()、start()、end()、groupCount()
调用find()或matches()成功后,才能安全调用这些方法:
-
group():返回本次匹配的完整子串 -
group(int i):返回第i个捕获组(括号内的子表达式)匹配的内容,索引从1开始 -
start()/end():返回匹配子串在原字符串中的起始/结束索引(end()是右开区间) -
groupCount():返回正则中捕获组的数量(不包括整个表达式本身)
注意:如果未成功匹配就调用group(),会抛IllegalStateException。
替换与遍历:replaceAll()、replaceFirst()、reset()
Matcher提供基于匹配结果的文本处理能力:
-
replaceAll("新串"):把所有匹配部分替换成指定字符串 -
replaceFirst("新串"):只替换第一个匹配项 -
reset():重置Matcher状态,可复用它匹配新字符串(避免重复创建对象)
例如:matcher.reset("新文本").find(),就能让同一个Matcher继续工作。










