正则表达式是Java开发中处理文本的瑞士军刀。本文将带你系统掌握Java正则表达式的核心知识,并通过大量实战案例展示其在真实项目中的应用价值。
一、Java正则表达式基础语法
Java通过java.util.regex包提供正则支持,主要包含Pattern和Matcher两个核心类。基础元字符包括:
- .
匹配任意单个字符
- \d
匹配数字,等价于[0-9]
- \w
匹配单词字符[a-zA-Z_0-9]
- \s
匹配空白字符
量词的使用技巧:
- *
0次或多次
- +
1次或多次
- ?
0次或1次
- {n}
恰好n次
- {n,}
至少n次
二、Pattern与Matcher深度解析
创建正则表达式对象的正确方式:
Pattern pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");
Matcher matcher = pattern.matcher(input);
Matcher类的关键方法:
- matches(): 整个字符串匹配
- find(): 查找下一个匹配项
- group(): 获取匹配内容
- start()/end(): 获取匹配位置
三、分组与反向引用实战
分组使用()
实现,反向引用通过\n
表示:
// 匹配重复单词
Pattern.compile("\\b(\\w+)\\b\\s+\\1\\b");
命名分组(Java 7+):
"(?<year>\\d{4})-(?<month>\\d{2})"
四、常用正则表达式优化技巧
- 预编译Pattern对象
- 避免贪婪匹配(使用
?
转为非贪婪模式) - 合理使用字符类替代分支条件
- 边界匹配(
^
,$
,\\b
)提升效率
五、20个实战应用场景
- 邮箱验证:
^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$
- 手机号验证(中国大陆):
^1[3-9]\\d{9}$
- 提取HTML标签内容:
<(\\w+)>(.*?)<\\/\\1>
- 日志时间戳解析:
\\[\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\]
- 密码强度校验(至少8位,含大小写和数字):
^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$
六、Java 12+新特性
Java 12引入了Matcher.replaceAll(Function<MatchResult, String>)
等增强功能:
String result = Pattern.compile("\\d+")
.matcher("Item 123 and 456")
.replaceAll(mr -> String.valueOf(Integer.parseInt(mr.group()) * 2));
七、性能调优与常见陷阱
- 避免回溯灾难:
// 错误示例:".*\\d{4}"
// 正确写法:"[^\\d]*\\d{4}"
- 使用独占量词(
++
,?+
,*+
)防止回溯 - 复杂正则拆分为多个简单匹配
八、调试工具推荐
- RegexBuddy
- RegExr在线测试工具
- IDEA内置正则调试器
通过系统学习和实践这些技巧,你将能游刃有余地处理各种文本处理需求。正则表达式虽然学习曲线陡峭,但一旦掌握将成为你的强大武器。建议收藏本文作为日常开发的参考手册。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。