跳到主要内容

Java 正则表达式

介绍

正则表达式(Regular Expression,简称 regex)是一种强大的工具,用于匹配、搜索和操作文本。在 Java 中,正则表达式通过 java.util.regex 包提供支持。正则表达式可以用于验证输入、提取数据、替换文本等场景。

Java 中的正则表达式主要由两个类支持:

  • Pattern:表示一个编译后的正则表达式。
  • Matcher:用于对输入字符串进行匹配操作。

基本语法

正则表达式由普通字符(如字母、数字)和特殊字符(称为元字符)组成。以下是一些常见的元字符:

  • .:匹配任意单个字符(除了换行符)。
  • \d:匹配任意数字(等价于 [0-9])。
  • \D:匹配任意非数字字符。
  • \w:匹配任意字母、数字或下划线(等价于 [a-zA-Z0-9_])。
  • \W:匹配任意非字母、数字或下划线的字符。
  • \s:匹配任意空白字符(包括空格、制表符、换行符等)。
  • \S:匹配任意非空白字符。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • *:匹配前面的字符零次或多次。
  • +:匹配前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • {n}:匹配前面的字符恰好 n 次。
  • {n,}:匹配前面的字符至少 n 次。
  • {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。

示例:匹配电子邮件地址

以下是一个简单的正则表达式示例,用于匹配电子邮件地址:

java
import java.util.regex.*;

public class RegexExample {
public static void main(String[] args) {
String email = "[email protected]";
String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(email);

if (matcher.matches()) {
System.out.println("Valid email address");
} else {
System.out.println("Invalid email address");
}
}
}

输入:

输出:

Valid email address

实际应用场景

1. 验证用户输入

正则表达式常用于验证用户输入,例如验证电话号码、电子邮件地址、密码强度等。

java
String phoneNumber = "123-456-7890";
String regex = "^\\d{3}-\\d{3}-\\d{4}$";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(phoneNumber);

if (matcher.matches()) {
System.out.println("Valid phone number");
} else {
System.out.println("Invalid phone number");
}

2. 提取数据

正则表达式可以用于从文本中提取特定格式的数据,例如从日志文件中提取日期和时间。

java
String logEntry = "2023-10-01 12:34:56 INFO: User logged in";
String regex = "(\\d{4}-\\d{2}-\\d{2}) (\\d{2}:\\d{2}:\\d{2})";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(logEntry);

if (matcher.find()) {
System.out.println("Date: " + matcher.group(1));
System.out.println("Time: " + matcher.group(2));
}

3. 替换文本

正则表达式还可以用于替换文本中的特定部分。例如,将文本中的所有数字替换为 #

java
String text = "My phone number is 123-456-7890.";
String regex = "\\d";
String replacement = "#";

String result = text.replaceAll(regex, replacement);
System.out.println(result);

输出:

My phone number is ###-###-####.

总结

正则表达式是处理文本的强大工具,尤其在 Java 中,通过 PatternMatcher 类可以轻松实现复杂的文本匹配和操作。掌握正则表达式的基本语法和常见用法,可以大大提高你的编程效率。

附加资源

练习

  1. 编写一个正则表达式,验证一个字符串是否为有效的 URL。
  2. 使用正则表达式从以下文本中提取所有的电子邮件地址:
    Contact us at [email protected] or [email protected] for more information.
  3. 编写一个程序,将文本中的所有电话号码替换为 [PHONE]
提示

正则表达式虽然强大,但也可能变得复杂。建议从简单的模式开始,逐步增加复杂性,并在实际项目中多加练习。