matches()方法默认全串匹配,自动添加^和$锚点,无需手动添加,适用于校验纯数字、邮箱、手机号等格式,需注意转义、空字符串及性能优化。

matches() 方法会自动在正则表达式前后隐式添加 ^ 和 $,所以它默认就校验整个字符串是否**完全匹配**,无需手动加锚点。
matches 本质是全串匹配
调用 "abc".matches("ab") 返回 false,因为虽然子串匹配,但 matches 要求从头到尾都符合——相当于执行 "abc".matches("^ab$")。它不是查找子串,而是做整体断言。
写正则时不用加 ^ 和 $
直接写业务逻辑所需的模式即可,比如:
- 校验纯数字:
"123".matches("\d+")✅("123abc"❌) - 校验邮箱格式:
"a@b.com".matches("[\w.-]+@\w+\.\w+") - 校验手机号(简单版):
"13812345678".matches("1[3-9]\d{9}")
注意转义和边界情况
Java 字符串中反斜杠需双写,且要留意正则本身的语义:
立即学习“Java免费学习笔记(深入)”;
-
".".matches(".")是false,因为.在正则中匹配任意字符;想匹配字面量点号,得写"\." - 空字符串校验:
"".matches("")返回true,但"".matches("a*")也返回true;若要求非空,用+".+"或+".+"配合长度判断 - 如果正则含
.*,它会轻易匹配空串或任意内容,慎用
替代方案:Pattern.compile + matcher.matches()
如果需要复用正则、或做多轮校验,提前编译更高效:
Pattern p = Pattern.compile("\d{4}-\d{2}-\d{2}");boolean ok = p.matcher("2023-12-25").matches();
这和 "2023-12-25".matches("\d{4}-\d{2}-\d{2}") 行为一致,只是避免重复编译。


















