Java 正则表达式详解
正则表达式(Regular Expressions, 简称 Regex)是一种用于匹配字符串中字符组合的模式。它广泛应用于文本处理、数据验证、搜索和替换等场景。在 Java 中,正则表达式是通过 java.util.regex
包来实现的,主要包括三个类:Pattern
、Matcher
和 PatternSyntaxException
。
1. 基本概念
在 Java 中,正则表达式的基本构成如下:
- 字符:普通字符,如
a
、b
、1
等。 - 元字符:具有特殊意义的字符,如
.
(匹配任意单个字符)、*
(匹配零个或多个前面的元素)、+
(匹配一个或多个前面的元素)等。 - 字符类:用方括号
[]
定义的字符集合,例如[abc]
匹配a
、b
或c
。 - 锚点:用于匹配字符串的边界,如
^
(匹配行的开始)和$
(匹配行的结束)。
2. 常用元字符
.
:匹配除换行符以外的任意字符。*
:匹配零个或多个前面的字符。+
:匹配一个或多个前面的字符。?
:匹配零个或一个前面的字符。|
:表示“或”,例如abc|def
可以匹配abc
或def
。{n}
:匹配恰好 n 次,例如a{3}
匹配aaa
。{n,}
:匹配至少 n 次,例如a{2,}
匹配aa
、aaa
、aaaa
等。{n,m}
:匹配 n 到 m 次,例如a{1,3}
匹配a
、aa
、aaa
。
3. 编写正则表达式
在 Java 中使用正则表达式的步骤如下:
- 使用
Pattern
类编译正则表达式。 - 使用
Matcher
类对输入字符串进行匹配。 - 通过
Matcher
类的方法获取匹配结果。
4. 代码示例
下面是一个简单的示例,展示如何使用 Java 的正则表达式查找和替换字符串中的某些内容。
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 and my phone number is 123-456-7890.";
// 匹配邮箱地址的正则表达式
String emailRegex = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}";
Pattern emailPattern = Pattern.compile(emailRegex);
Matcher emailMatcher = emailPattern.matcher(input);
System.out.println("找到的邮箱:");
while (emailMatcher.find()) {
System.out.println(emailMatcher.group());
}
// 匹配手机号码的正则表达式
String phoneRegex = "\\d{3}-\\d{3}-\\d{4}";
Pattern phonePattern = Pattern.compile(phoneRegex);
Matcher phoneMatcher = phonePattern.matcher(input);
System.out.println("\n找到的手机号码:");
while (phoneMatcher.find()) {
System.out.println(phoneMatcher.group());
}
// 替换邮箱地址
String maskedInput = emailMatcher.replaceAll("*****");
System.out.println("\n替换后的文本:");
System.out.println(maskedInput);
}
}
5. 输出结果
运行以上代码,输出将如下所示:
找到的邮箱:
example@example.com
找到的手机号码:
123-456-7890
替换后的文本:
Hello, my email is ***** and my phone number is 123-456-7890.
6. 总结
Java 的正则表达式功能强大,能够有效地进行字符串的匹配和操作。了解并掌握正则表达式,可以极大地提升字符串处理的效率。无论是简单的字符匹配还是复杂的文本处理,掌握正则表达式都将是一个有益的技能。希望本文能为你提供一个清晰的正则表达式入门框架,帮助你在实际编程中更好地应用这一强大工具。