matches 是 string 类方法,用于全字符串正则匹配,等价于自动添加 ^ 和 $,返回 boolean;适合轻量格式校验,但高频使用应预编译 pattern 以提升性能。

matches 是 Java 中 String 类的一个方法,用于判断整个字符串是否**完全匹配**给定的正则表达式。它内部调用的是 Pattern.matches(regex, input),返回 boolean 值,适合做格式校验。
基本用法:直接调用 matches
语法简洁,无需编译 Pattern 对象,适合一次性、轻量级校验:
-
正确示例:
"13812345678".matches("\d{11}")→true(11 位纯数字) -
正确示例:
"user@example.com".matches("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")→true -
常见错误:
"abc123".matches("\d+")→false(因为整个字符串必须全是数字,而开头有字母)
注意:matches 默认是“全匹配”,不是“包含匹配”
它等价于在正则前后自动加上 ^ 和 $,所以不需要手动写锚点——但如果你写了,也没问题:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
"hello".matches("hello")✅ 等价于"hello".matches("^hello$") -
"hello world".matches("hello")❌ 不匹配(中间有空格,不满足“整个字符串 = hello”) - 想检查是否“包含”某模式?改用
Pattern.compile("...").matcher(str).find()
常用格式校验正则示例
直接贴可读性强、经常见到的写法(已适配 matches 的全匹配语义):
-
手机号(国内 11 位,以 1 开头):
str.matches("1[3-9]\d{9}") -
邮箱(简化版):
str.matches("[a-zA-Z0-9][\w.-]*@[a-zA-Z0-9][\w.-]*\.[a-zA-Z]{2,}") -
密码(8–20 位,含大小写字母和数字):
str.matches("(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,20}") -
日期(YYYY-MM-DD 格式):
str.matches("\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])")(注意:不校验具体月份天数,如 2 月 30 日会通过)
性能与进阶建议
如果同一正则反复用于多个字符串(比如在循环中校验大量数据),不要频繁调用 matches,因为它每次都会隐式编译正则,开销较大:
- ✅ 推荐:提前编译
Pattern pattern = Pattern.compile("\d{11}");,再用pattern.matcher(str).matches() - ✅ 更简洁:静态复用
private static final Pattern MOBILE_PATTERN = Pattern.compile("1[3-9]\d{9}"); - ⚠️ 注意:正则中反斜杠要双写(Java 字符串转义 + 正则引擎转义),比如
"\d"表示正则里的d
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










