Java学习——正则表达式
在Java开发中,正则表达式(Regular Expression)是处理文本匹配、验证和提取的核心工具,主要通过java.util.regex
包实现。以下是系统性解析:
🔍 正则表达式的作用
- 文本验证
- 验证格式规范:邮箱、手机号、身份证号等(如
1[3-9]\d{9}
匹配手机号)
- 验证格式规范:邮箱、手机号、身份证号等(如
- 文本搜索与提取
- 从日志、文档中提取特定模式的数据(如提取URL或日期)
- 文本替换与清洗
- 批量替换敏感词、格式化文本(如
replaceAll("\\s+", " ")
合并多余空格)
- 批量替换敏感词、格式化文本(如
- 字符串分割
- 按复杂规则切分字符串(如
split("\\|")
按竖线分割)
- 按复杂规则切分字符串(如
⚙️ Java中常用正则表达式
类别 | 示例 | 说明 |
---|---|---|
基础匹配 | "a.b" | 匹配"a"后接任意字符+"b" |
数字匹配 | "\\d+" | 匹配连续数字(如"123") |
字符集 | "[aeiou]" | 匹配任意元音字母 |
边界控制 | "^Java" | 匹配以"Java"开头的字符串 |
分组捕获 | "(\\d{3})-(\\d{4})" | 提取区号和号码(如"020-1234") |
📌 特殊字符需转义:如
.
需写为\\.
,\
需写为\\\\
🛠️ Java正则表达式使用步骤
-
编译正则模式
使用Pattern.compile()
将字符串编译为可重用对象:Pattern pattern = Pattern.compile("\\d{3}"); // 匹配3位数字
-
创建匹配器
绑定目标文本与模式:Matcher matcher = pattern.matcher("ID: 123, Code: 456");
-
执行匹配操作
matcher.matches()
:全文本匹配matcher.find()
:迭代查找子串matcher.group()
:获取匹配结果
while (matcher.find()) {System.out.println("找到数字: " + matcher.group()); // 输出123, 456 }
📧 匹配Email的正则表达式及代码
标准表达式(兼容多数格式):
^[\w+.-]+@[\w.-]+\.[a-zA-Z]{2,}$
- 分解说明:
^[\w+.-]+
:本地部分(允许字母、数字、.
、-
、_
)@
:分隔符[\w.-]+
:域名(如gmail
、yahoo
)\.[a-zA-Z]{2,}
:顶级域名(如.com
、.org
,至少2位)
Java完整示例:
import java.util.regex.*;public class EmailValidator {public static void main(String[] args) {String emailRegex = "^[\\w+.-]+@[\\w.-]+\\.[a-zA-Z]{2,}$";String email = "user.name+2024@example.com";Pattern pattern = Pattern.compile(emailRegex);Matcher matcher = pattern.matcher(email);if (matcher.matches()) {System.out.println("✅ 邮箱有效");} else {System.out.println("❌ 邮箱无效");}}
}
⚠️ 注意:RFC标准复杂,此表达式覆盖常见格式但非100%完整。
💡 进阶技巧
- 预编译优化
多次使用的正则表达式应预编译Pattern
对象提升性能。 - 非捕获分组
用(?:...)
替代(...)
避免存储分组,减少开销。 - 懒惰匹配
在量词后加?
(如.*?
)避免过度匹配。
💎 总结
正则表达式在Java中通过 Pattern
编译、Matcher
操作实现高效文本处理,适用于验证(如邮箱)、提取(如电话号码)、替换(如数据脱敏)等场景。掌握核心语法(如