正则表达式(Regular Expression,简称 Regex 或 RegExp)是一种用于描述字符串模式的工具,广泛应用于字符串的匹配、搜索、替换和验证等操作。它通过特定的语法规则来匹配字符串中的特定模式。

在 Java 中,正则表达式是通过 java.util.regex 包中的 Pattern 和 Matcher 类来实现的。


✅ 正则表达式的基本构成

1. 字符匹配

  • . : 匹配任意一个字符(除了换行符)
  • \d : 匹配一个数字字符,等价于 [0-9]
  • \D : 匹配非数字字符,等价于 [^0-9]
  • \w : 匹配一个字母、数字或下划线字符,等价于 [a-zA-Z0-9_]
  • \W : 匹配非字母、数字或下划线字符,等价于 [^a-zA-Z0-9_]
  • \s : 匹配一个空白字符(如空格、制表符、换行符等)
  • \S : 匹配一个非空白字符
  • \b : 匹配单词边界
  • \B : 匹配非单词边界

2. 量词

  • * : 匹配前面的字符零次或多次
  • + : 匹配前面的字符一次或多次
  • ? : 匹配前面的字符零次或一次
  • {n} : 匹配前面字符恰好 n 次
  • {n,} : 匹配前面字符至少 n 次
  • {n,m} : 匹配前面字符至少 n 次,至多 m 次

3. 字符集与范围

  • [abc] : 匹配字符 a、b 或 c 中的任意一个字符
  • [^abc] : 匹配除 a、b、c 以外的任意字符
  • [a-z] : 匹配小写字母中的任意一个字符
  • [A-Z] : 匹配大写字母中的任意一个字符
  • [0-9] : 匹配数字中的任意一个字符

4. 分组与选择

  • () : 用于分组匹配
  • | : 表示“或”操作,匹配左边或右边的表达式

5. 其他特殊字符

  • \ : 转义字符,用于转义特殊字符(如 .、*、+ 等)
  • ^ : 匹配输入的开始位置
  • $ : 匹配输入的结束位置

✅ Java 中正则表达式的应用

1. 使用 Pattern 类

Pattern 类代表了一个正则表达式,并提供了许多方法来对字符串进行匹配操作。它是正则表达式操作的核心。

2. 使用 Matcher 类

Matcher 类用于执行与正则表达式相关的匹配操作,如查找、替换、验证等。

3. 常用方法

方法 说明
Pattern.compile(String regex) 编译一个正则表达式,返回一个 Pattern 对象
matcher.find() 查找匹配的字符串
matcher.group() 获取匹配的子字符串
matcher.matches() 检查整个字符串是否与正则表达式匹配
matcher.replaceAll(String replacement) 替换所有匹配的部分

✅ 示例:正则表达式的使用

1. 判断字符串是否匹配正则表达式

1
2
3
4
5
6
7
8
9
10
11
import java.util.regex.Pattern;

public class RegexExample {
public static void main(String[] args) {
String regex = "^\\d{3}-\\d{2}-\\d{4}$"; // 社会安全号码(SSN)格式
String input = "123-45-6789";

boolean matches = Pattern.matches(regex, input);
System.out.println("匹配结果: " + matches);
}
}
  • 解释:这个正则表达式检查是否为一个有效的社会安全号码格式(例如:123-45-6789)。^ 表示字符串开始,\d{3} 表示三位数字,- 匹配一个连字符,\d{2} 表示两位数字,最后的 \d{4} 表示四位数字,$ 表示字符串结束。

2. 使用 Pattern 和 Matcher 查找匹配内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
public static void main(String[] args) {
String regex = "\\b\\w+\\b"; // 匹配单词
String input = "Hello, how are you?";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
System.out.println("找到单词: " + matcher.group());
}
}
}
  • 解释:这个正则表达式匹配字符串中的每个单词(由字母、数字或下划线组成)。\\b 是单词边界,\\w+ 匹配一个或多个字母、数字或下划线。

3. 替换匹配的部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
public static void main(String[] args) {
String regex = "\\d+"; // 匹配数字
String input = "I have 2 apples and 10 oranges.";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

String result = matcher.replaceAll("many"); // 替换数字为 "many"
System.out.println("替换后的字符串: " + result);
}
}
  • 解释:在这个示例中,正则表达式 \\d+ 匹配字符串中的所有数字,并将其替换为 "many"。

✅ 总结

正则表达式是一个强大且灵活的工具,在处理字符串匹配、替换和验证时非常有用。Java 提供了 Pattern 和 Matcher 类来实现正则表达式的匹配操作。通过掌握常见的正则语法和 Java 中的操作方法,你可以更加高效地处理字符串相关的任务。