正则表达式(Regular Expression,简称为Regex或RegExp)是用来描述字符串模式的工具,它在Java中被广泛应用于文本处理和匹配操作。Java中的正则表达式主要通过 `java.util.regex` 包来实现。
### 基本概念
1. **字面量字符**: 匹配自身的字符,例如 `abc` 匹配 "abc"。
2. **字符类**: 用方括号 `[]` 表示,例如 `[abc]` 匹配单个字符 `a`、`b` 或 `c`。
3. **预定义字符类**: 如 `\d` 匹配任意数字,`\w` 匹配任意单词字符。
4. **量词**: 指定匹配次数,例如 `*` 匹配零次或多次,`+` 匹配一次或多次,`?` 匹配零次或一次。
5. **边界匹配符**: 如 `^` 表示行的开头,`$` 表示行的结尾。
6. **分组和捕获**: 使用小括号 `()` 进行分组,可以捕获匹配的子串。
7. **反向引用**: 使用 `\1`、`\2` 等来引用分组捕获的内容。
### Java中的正则表达式示例
#### 示例1:匹配邮箱地址
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
String input = "Email addresses: alice@example.com, bob@gmail.com, charlie@domain.com";
String regex = "\\b[\\w.-]+@[\\w.-]+\\.\\w{2,4}\\b";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println("Found email: " + matcher.group());
}
}
}
```
- **解释**:
- `\b`: 表示单词边界,确保匹配整个邮箱地址。
- `[\\w.-]+`: 匹配邮箱地址中的用户名部分,可以包含字母、数字、下划线、句点和连字符。
- `@`: 匹配邮箱地址中的 `@` 符号。
- `[\\w.-]+`: 匹配邮箱地址中的域名部分,可以包含字母、数字、下划线、句点和连字符。
- `\\.`: 匹配邮箱地址中的点号 `.`。
- `\w{2,4}`: 匹配邮箱地址中的顶级域名,如 `.com`、`.org` 等。
#### 示例2:替换字符串中的空格
```java
public class RegexReplaceExample {
public static void main(String[] args) {
String input = "Hello world! This is Java regex example.";
String regex = "\\s+"; // 匹配一个或多个空格
String replaced = input.replaceAll(regex, " ");
System.out.println("Original: " + input);
System.out.println("Replaced: " + replaced);
}
}
```
- **解释**:
- `\s+`: 匹配一个或多个空格字符。
- `replaceAll(regex, " ")`: 使用空格替换匹配到的空格字符。
### 总结
Java 的正则表达式提供了强大的文本处理功能,通过 `Pattern` 和 `Matcher` 类可以实现字符串的匹配、查找和替换操作。熟练掌握正则表达式可以极大地简化复杂文本处理任务,是Java中常用的工具之一。