Java正则匹配与提取
正则表达式(Regular Expression)是一种强大的文本匹配工具,可以在字符串中查找特定的模式。在Java中,通过正则表达式可以进行字符串的匹配、提取和替换等操作。本文将介绍Java中如何使用正则表达式进行匹配和提取,并通过代码示例详细说明。
正则表达式基础
正则表达式由字符和特殊符号组成,用来定义一个字符串的模式。以下是一些常见的正则表达式元字符:
.:匹配任意字符(除了换行符)*:匹配前一个字符0次或多次+:匹配前一个字符1次或多次?:匹配前一个字符0次或1次|:匹配多个模式中的一个[...]:匹配方括号中的任意字符[^...]:匹配除了方括号中字符以外的任意字符^:匹配字符串的开头$:匹配字符串的结尾\d:匹配任意数字\D:匹配任意非数字字符\w:匹配任意字母、数字或下划线\W:匹配任意非字母、数字或下划线字符\s:匹配任意空白字符\S:匹配任意非空白字符
使用Pattern和Matcher类进行匹配和提取
在Java中,可以使用Pattern和Matcher类来进行正则表达式的匹配和提取。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
String input = "Hello, my email is example@example.com";
// 匹配邮箱地址
String patternString = "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\\b";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
// 查找并输出匹配到的邮箱地址
while (matcher.find()) {
System.out.println("Email found: " + matcher.group());
}
}
}
上述代码中,首先定义了一个字符串input,其中包含一个邮箱地址。然后,使用Pattern.compile()方法将正则表达式编译为一个Pattern对象。接下来,通过Pattern.matcher()方法将要匹配的字符串传入,返回一个Matcher对象。最后,使用Matcher.find()方法循环查找匹配到的字符串,并使用Matcher.group()方法获取匹配到的字符串。
运行上述代码,输出结果如下:
Email found: example@example.com
提取匹配的内容
除了查找匹配的字符串,还可以提取正则表达式中定义的分组内容。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
String input = "My phone number is (123) 456-7890";
// 提取电话号码的区号和号码部分
String patternString = "\\((\\d{3})\\) (\\d{3}-\\d{4})";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
// 提取并输出区号和号码部分
if (matcher.find()) {
String areaCode = matcher.group(1);
String phoneNumber = matcher.group(2);
System.out.println("Area code: " + areaCode);
System.out.println("Phone number: " + phoneNumber);
}
}
}
上述代码中,定义了一个字符串input,其中包含一个电话号码。然后,使用Pattern.compile()方法将正则表达式编译为一个Pattern对象,并使用Pattern.matcher()方法创建一个Matcher对象。接下来,使用Matcher.find()方法查找匹配的字符串。如果找到了匹配的字符串,可以通过Matcher.group()方法提取分组内容,并分别赋值给areaCode和phoneNumber变量。
运行上述代码,输出结果如下:
Area code: 123
Phone number: 456-7890
















