Java 正则表达式详解
Java 正则表达式是用于匹配字符串的一种语言,通过一些预定义的字符或模式来匹配字符串。正则表达式可以用于验证用户输入的数据、过滤文本中的特定字符等等。
正则表达式语法
在 Java 中使用正则表达式需要使用 java.util.regex
包中的类。常用的有 Pattern
和 Matcher
两个类。Pattern
类用于定义正则表达式,Matcher
类用于匹配文本。
以下是一些常用的正则表达式语法:
字符类
字符类用于匹配一个字符,通常使用方括号 [ ]
表示。例如,正则表达式 [abc]
表示匹配字符 a
、b
或 c
。
示例代码:
String regex = "[abc]";
String input = "abc123";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
输出结果:
a
b
c
字符集合
字符集合用于匹配一个字符集合,可以使用 -
来表示范围,例如,正则表达式 [a-z]
表示匹配任意小写字母。
示例代码:
String regex = "[a-z]";
String input = "abc123";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
输出结果:
a
b
c
非字符集合
非字符集合用于匹配除指定字符集合外的任意字符,可以使用 ^
来表示。例如,正则表达式 [^a-z]
表示匹配任意非小写字母的字符。
示例代码:
String regex = "[^a-z]";
String input = "abc123";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
输出结果:
1
2
3
通配符
通配符用于匹配任意单个字符,通常使用 .
表示。例如,正则表达式 a.c
表示匹配一个以 a
开始,以 c
结束,中间任意一个字符的字符串。
示例代码:
String regex = "a.c";
String input = "abc ac adc";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
输出结果:
abc
adc
边界
边界用于指定一个字符串的边缘,通常使用 ^
和 $
来表示。例如,正则表达式 ^a.*c$
表示匹配一个以 a
开始,以 c
结束的字符串。
示例代码:
String regex = "^a.*c$";
String input = "abc ac adc";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
输出结果:
abc
分组
分组用于对正则表达式的一部分进行分组,方便后续的引用。可以使用圆括号 ()
进行分组。例如,正则表达式 (ab)+
表示匹配一个或多个 ab
组成的字符串。
示例代码:
String regex = "(ab)+";
String input = "ab abab ababab";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
输出结果:
ab
abab
ababab
Java 正则表达式示例
验证手机号码
以下正则表达式可以验证中国大陆的手机号码:
String regex = "^(\\0086|\\+86)?1[3-9]\\d{9}$";
String input = "13812345678";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
System.out.println(matcher.matches());
输出结果:
true
过滤 HTML 标签
以下正则表达式可以过滤 HTML 标签:
String regex = "<[^>]+>";
String input = "<p>Hello, World!</p>";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
System.out.println(matcher.replaceAll(""));
输出结果:
Hello, World!
提取邮件地址
以下正则表达式可以提取邮件地址:
String regex = "\\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\\b";
String input = "john.doe@example.com, jane.doe@example.com";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
输出结果:
john.doe@example.com
jane.doe@example.com
结论
Java 正则表达式是一种强大的字符串匹配语言,可以用于验证用户输入、过滤文本、提取特定信息等等。掌握正则表达式的语法和常见用法,有助于提高 Java 开发的效率和精度。