正则表达式基础概念
正则表达式(Regular Expression,简称Regex)是一种用于描述字符串模式的强大工具,在Java中广泛应用于字符串匹配、查找、替换等操作,通过预定义的字符组合和语法规则,开发者可以高效地处理复杂的文本验证与解析任务,Java对正则表达式的支持主要依赖于java.util.regex包,该包提供了Pattern和Matcher两个核心类,帮助开发者实现正则表达式的编译与匹配功能。

创建正则表达式的核心步骤
在Java中创建正则表达式通常分为两步:编译正则模式和执行匹配操作。
编译正则模式
使用Pattern类的静态方法compile()可以将正则表达式字符串编译为一个Pattern对象,该方法接受两个参数:正则表达式字符串和可选的匹配标志(如CASE_INSENSITIVE表示忽略大小写)。
import java.util.regex.Pattern;
Pattern pattern = Pattern.compile("\\d+"); // 匹配一个或多个数字
注意:Java中反斜杠\是转义字符,因此在正则表达式中表示\时需写成\\(如\d需写为\\d)。

创建匹配器
通过Pattern对象的matcher()方法可以生成一个Matcher对象,该对象用于对输入字符串执行具体的匹配操作。
String input = "abc123def"; Matcher matcher = pattern.matcher(input);
正则表达式的常用语法
掌握正则表达式的核心语法是创建有效模式的关键,以下是Java中常用的正则表达式元字符:
字符类
- 匹配任意字符(除换行符)
[abc]:匹配a、b或c中的任意一个字符[^abc]:匹配除a、b、c外的任意字符[a-z]:匹配任意小写字母\d:匹配数字(等同于[0-9])\D:匹配非数字字符\w:匹配单词字符(字母、数字、下划线)\s:匹配空白字符(空格、制表符、换行符)
量词
- 匹配0次或多次
- 匹配1次或多次
- 匹配0次或1次
{n}:匹配恰好n次{n,}:匹配至少n次{n,m}:匹配n到m次
定位符
^:匹配字符串开头- 匹配字符串结尾
\b:匹配单词边界\B:匹配非单词边界
实际应用示例
验证邮箱格式
String emailRegex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
Pattern pattern = Pattern.compile(emailRegex);
String email = "example@domain.com";
boolean isValid = pattern.matcher(email).matches(); // 返回true
提取字符串中的数字
String text = "价格:¥199,数量:5件";
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("找到数字:" + matcher.group()); // 输出199和5
}
替换匹配内容
String text = "Hello Java, Java is great.";
Pattern pattern = Pattern.compile("Java");
Matcher matcher = pattern.matcher(text);
String newText = matcher.replaceAll("Python"); // 输出"Hello Python, Python is great."
高级特性与注意事项
- 预编译优化:如果正则表达式需要多次使用,建议提前编译为
Pattern对象,避免重复编译带来的性能损耗。 - 分组与捕获:使用创建分组,可通过
matcher.group(index)访问捕获组。(\d{3})-(\d{4})可分别匹配区号和号码。 - 非贪婪匹配:在量词后添加可实现非贪婪匹配(如匹配尽可能少的字符)。
- 异常处理:正则表达式语法错误会抛出
PatternSyntaxException,需进行异常捕获。
通过以上方法,开发者可以灵活地在Java中创建和使用正则表达式,高效解决文本处理中的各类问题,掌握正则表达式的语法规则并结合Pattern与Matcher的API,能显著提升字符串操作的效率与代码的可读性。





















