string.matches()要求整个字符串完全匹配正则表达式,返回boolean值;需注意转义、全匹配语义、性能及替代方案。

String.matches() 是 Java 中用于判断字符串是否完全匹配指定正则表达式的便捷方法,它内部调用 Pattern.matches(regex, str),返回 true 或 false。
matches 方法的基本用法
该方法签名是:public boolean matches(String regex)。注意:它要求整个字符串**完全匹配**正则,不是“包含”或“部分匹配”。
- 如果正则写成
"\d+",那么"123"返回true,但"abc123def"返回false(因为开头结尾有非数字字符) - 若想做“包含匹配”,应改用
Pattern.compile("...").matcher(str).find() - 正则中需对特殊字符(如
.、*、?、)进行双反斜杠转义,例如匹配字面量点号要写"\."
常见匹配场景与写法示例
以下是一些实用的正则写法,注意开头结尾隐含了全串匹配语义:
- 手机号(简单版,11位数字):
str.matches("1\d{10}") - 邮箱(基础校验):
str.matches("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}") - 纯字母字符串:
str.matches("[a-zA-Z]+") - 带小数的数字(如 "3.14" 或 "5"):
str.matches("-?\d+(\.\d+)?")
注意事项和易错点
使用时容易忽略的关键细节:
- 空字符串
""对任何非空正则都返回false;若正则允许空(如"a*"),则"".matches("a*")为true - 正则中的
^和$在matches()中**不需要加**,因为它本身就代表全串匹配;加上反而可能出错(比如"^\d+$"虽然也能工作,但冗余) - 性能敏感场景慎用:每次调用都会编译正则(JVM 有缓存,但仍有开销),高频匹配建议预编译
Pattern对象复用
替代方案:何时不该用 matches
当需要以下能力时,应转向 Pattern + Matcher:
- 提取匹配内容(用
group()) - 多次匹配同一字符串(如找所有电话号码)
- 需要捕获分组、替换、或更复杂的控制逻辑
- 正则固定且调用频繁——预编译避免重复解析
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











