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