Java 的正则表达式使用 java.util.regex
包中的类。主要类是 Pattern
和 Matcher
。 Pattern
对象表示一个编译后的正则表达式,Matcher
对象则用于对输入字符串进行匹配。
以下是一些常用的 Java 正则表达式示例和讲解:
1. 创建 Pattern 对象:
首先,你需要创建一个 Pattern
对象,它将你的正则表达式编译成一个可用于匹配的模式。
String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"; // 简单的邮箱正则表达式
Pattern pattern = Pattern.compile(regex);
Pattern.compile(regex)
方法将正则表达式字符串编译成 Pattern
对象。 regex
字符串包含你的正则表达式。 这个例子是一个简单的邮箱验证正则表达式。
2. 创建 Matcher 对象:
接下来,你需要创建一个 Matcher
对象,它将 Pattern
对象与目标字符串进行匹配。
String input = "test@example.com";
Matcher matcher = pattern.matcher(input);
pattern.matcher(input)
方法创建一个 Matcher
对象,它将 pattern
应用于 input
字符串。
3. 执行匹配:
Matcher
类提供了多种方法来执行匹配:
matcher.matches()
: 检查整个字符串是否与正则表达式完全匹配。 返回布尔值。matcher.find()
: 查找字符串中与正则表达式匹配的下一个子字符串。 返回布尔值。 你可以多次调用find()
来找到所有匹配项。matcher.lookingAt()
: 检查字符串的开头是否与正则表达式匹配。 返回布尔值。matcher.group()
: 获取匹配的子字符串。 第一次调用返回整个匹配,后续调用返回捕获组 (capturing group) 的内容。matcher.groupCount()
: 返回捕获组的数量。matcher.start()
: 返回匹配子串在输入字符串中的起始索引。matcher.end()
: 返回匹配子串在输入字符串中的结束索引 (不包括结束字符)。
示例:验证邮箱地址
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
Pattern pattern = Pattern.compile(regex);
String[] emails = {"test@example.com", "invalid-email", "another.test@subdomain.example.co.uk", "wrong@format."};
for (String email : emails) {
Matcher matcher = pattern.matcher(email);
if (matcher.matches()) {
System.out.println(email + " is a valid email address.");
} else {
System.out.println(email + " is not a valid email address.");
}
}
}
}
元字符 (Metacharacters):
^
: 匹配字符串的开头。$
: 匹配字符串的结尾。.
: 匹配除换行符以外的任何字符。*
: 匹配前面的字符零次或多次。+
: 匹配前面的字符一次或多次。?
: 匹配前面的字符零次或一次。[]
: 定义字符集合。[^...]
: 定义否定字符集合。|
: 或操作符()
: 定义捕获组 (capturing group)\\
: 转义特殊字符。
字符类 (Character Classes):
\d
: 匹配数字 [0-9]\D
: 匹配非数字 [^0-9]\s
: 匹配空白字符 (空格、制表符、换行符等)\S
: 匹配非空白字符\w
: 匹配单词字符 [a-zA-Z0-9_]\W
: 匹配非单词字符
需要深入学习 Pattern
和 Matcher
类的更多方法和特性。
正则表达式的应用
字符串分割:使用String.split方法。
字符串替换:使用String.replaceAll方法。
查找特定模式:使用Pattern和Matcher。