Java 正则表达式速查表:全面指南
简介
正则表达式(Regular Expression)在 Java 编程中是一个强大的工具,用于处理和操作字符串。它提供了一种灵活且精确的方式来匹配、搜索、替换和拆分字符串。本博客将围绕 Java 正则表达式速查表展开,涵盖基础概念、使用方法、常见实践以及最佳实践,帮助你快速掌握并高效运用正则表达式。
目录
- 基础概念
- 使用方法
- 匹配字符串
- 搜索字符串
- 替换字符串
- 拆分字符串
- 常见实践
- 验证邮箱地址
- 验证手机号码
- 提取特定文本
- 最佳实践
- 性能优化
- 可读性提升
- 小结
- 参考资料
基础概念
正则表达式是由字符和特殊字符(元字符)组成的模式。这些模式用于定义字符串的匹配规则。例如,\d
是一个元字符,表示任意一个数字,[a-zA-Z]
表示任意一个字母(大写或小写)。
常见元字符:
- .
:匹配任意单个字符(除了换行符)
- *
:匹配前面的字符 0 次或多次
- +
:匹配前面的字符 1 次或多次
- ?
:匹配前面的字符 0 次或 1 次
- []
:匹配方括号内指定的任意一个字符
- ()
:用于分组,将多个字符组合成一个单元
使用方法
匹配字符串
在 Java 中,可以使用 Pattern
和 Matcher
类来进行正则表达式匹配。
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexExample {
public static void main(String[] args) {
String text = "Hello, World!";
String pattern = "Hello";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(text);
if (m.find()) {
System.out.println("匹配成功");
} else {
System.out.println("匹配失败");
}
}
}
搜索字符串
搜索字符串中所有匹配的部分:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexSearchExample {
public static void main(String[] args) {
String text = "This is a test. This is another test.";
String pattern = "test";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(text);
while (m.find()) {
System.out.println("找到匹配项: " + m.group());
System.out.println("起始位置: " + m.start());
System.out.println("结束位置: " + m.end());
}
}
}
替换字符串
使用正则表达式替换字符串中的匹配部分:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexReplaceExample {
public static void main(String[] args) {
String text = "Hello, World!";
String pattern = "World";
String replacement = "Java";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(text);
String result = m.replaceAll(replacement);
System.out.println("替换后的字符串: " + result);
}
}
拆分字符串
根据正则表达式拆分字符串:
import java.util.regex.Pattern;
public class RegexSplitExample {
public static void main(String[] args) {
String text = "one,two,three";
String pattern = ",";
Pattern r = Pattern.compile(pattern);
String[] parts = r.split(text);
for (String part : parts) {
System.out.println(part);
}
}
}
常见实践
验证邮箱地址
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class EmailValidator {
private static final String EMAIL_PATTERN =
"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$";
public static boolean validate(String email) {
Pattern pattern = Pattern.compile(EMAIL_PATTERN);
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}
public static void main(String[] args) {
String email = "[email protected]";
if (validate(email)) {
System.out.println("有效的邮箱地址");
} else {
System.out.println("无效的邮箱地址");
}
}
}
验证手机号码
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class PhoneNumberValidator {
private static final String PHONE_PATTERN =
"^1[3-9]\\d{9}$";
public static boolean validate(String phone) {
Pattern pattern = Pattern.compile(PHONE_PATTERN);
Matcher matcher = pattern.matcher(phone);
return matcher.matches();
}
public static void main(String[] args) {
String phone = "13800138000";
if (validate(phone)) {
System.out.println("有效的手机号码");
} else {
System.out.println("无效的手机号码");
}
}
}
提取特定文本
从 HTML 标签中提取文本:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class HtmlTextExtractor {
private static final String HTML_TAG_PATTERN =
"<.*?>";
public static String extractText(String html) {
Pattern pattern = Pattern.compile(HTML_TAG_PATTERN);
Matcher matcher = pattern.matcher(html);
return matcher.replaceAll("");
}
public static void main(String[] args) {
String html = "<p>Hello, World!</p>";
String text = extractText(html);
System.out.println("提取的文本: " + text);
}
}
最佳实践
性能优化
- 预编译正则表达式:在需要多次使用同一个正则表达式时,应预编译它,避免每次都进行编译,提高性能。
- 使用
Pattern.quote()
:如果要匹配的字符串包含特殊字符,使用Pattern.quote()
方法将其转换为字面量模式,以避免特殊字符被误解析。
可读性提升
- 使用注释:在复杂的正则表达式中添加注释,解释每个部分的作用,提高代码的可读性。
- 拆分复杂模式:将复杂的正则表达式拆分成多个简单的模式,逐步进行匹配和处理。
小结
通过本博客,我们详细介绍了 Java 正则表达式速查表相关内容,包括基础概念、使用方法、常见实践和最佳实践。正则表达式在字符串处理中非常强大,但需要不断练习和熟悉各种元字符及模式组合。希望这些知识能帮助你在 Java 开发中更高效地运用正则表达式。