String.matches()要求整个字符串完全匹配正则表达式,即隐式锚定^和$,不支持部分匹配;需转义特殊字符,高频使用应预编译Pattern以提升性能。

matches() 方法要求整个字符串都必须匹配正则表达式,不能只匹配其中一部分。
matches 的基本用法
Java 中 String 类的 matches(String regex) 方法会尝试将整个字符串与传入的正则表达式进行**全量匹配**。它内部等价于:
Pattern.matches(regex, str)
也就是说,它自动在正则前后隐式添加了 ^ 和 $ 锚点(但仅限于整个字符串匹配逻辑,不是字面添加)。
关键细节:必须完全匹配
常见误区是以为 matches 能像 find() 一样找子串。它不行——只要字符串开头、中间或结尾有不匹配的部分,就返回 false。
- "abc123".matches("\d+") → false(全是数字才对)
- "123".matches("\d+") → true
- "hello".matches("he.*o") → true(从头到尾都符合)
- "hello world".matches("he.*o") → false(末尾还有 " world" 未被覆盖)
需要部分匹配时怎么办?
如果目标是检查字符串中是否**包含**某个模式(而非整体匹配),应改用 Pattern + Matcher:
- 用 Pattern.compile("your_regex").matcher(str).find() 判断是否存在子串匹配
- 用 .lookingAt() 判断是否从开头匹配(不要求到结尾)
实用建议
- 验证邮箱、手机号、日期格式等固定结构时,matches 很合适,例如:
email.matches("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$") - 正则中无需手动加 ^ 和 $ ——matches 本身语义就是全字符串匹配
- 注意转义:Java 字符串里反斜杠要写两个,比如 "\d+" 表示正则中的 d+


















