文章目录
- [453. Java 正则表达式 - 异常处理:`PatternSyntaxException`](#453. Java 正则表达式 - 异常处理:
PatternSyntaxException) -
- [1️⃣ 什么是 `PatternSyntaxException`](#1️⃣ 什么是
PatternSyntaxException) - [2️⃣ 关键方法](#2️⃣ 关键方法)
- [3️⃣ 示例:捕获正则表达式语法错误](#3️⃣ 示例:捕获正则表达式语法错误)
- [4️⃣ 常见错误示例](#4️⃣ 常见错误示例)
- [5️⃣ 小结](#5️⃣ 小结)
- [1️⃣ 什么是 `PatternSyntaxException`](#1️⃣ 什么是
453. Java 正则表达式 - 异常处理:PatternSyntaxException
在使用正则表达式时,语法错误 是常见问题。Java 提供了 PatternSyntaxException 来帮助我们定位问题。
1️⃣ 什么是 PatternSyntaxException
- 类型:unchecked exception(非受检异常)
- 作用:当正则表达式语法错误时抛出
- 用途:帮助开发者快速定位正则表达式错误位置和原因
2️⃣ 关键方法
| 方法 | 功能 |
|---|---|
getDescription() |
返回错误描述信息,例如 "Dangling meta character '?'" |
getIndex() |
返回错误发生的位置(索引) |
getPattern() |
返回出错的正则表达式 |
getMessage() |
返回多行字符串,包含错误描述、索引和模式的可视化指示 |
💡 提示:结合这些方法可以精确定位问题,非常适合调试复杂正则表达式。
3️⃣ 示例:捕获正则表达式语法错误
java
import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.regex.PatternSyntaxException;
public class RegexTestHarness2 {
public static void main(String[] args) {
Pattern pattern = null;
Matcher matcher = null;
// 使用 Scanner 替代 Console,兼容 IDE
Scanner scanner = new Scanner(System.in);
while (true) {
try {
System.out.print("Enter your regex: ");
pattern = Pattern.compile(scanner.nextLine());
System.out.print("Enter input string to search: ");
matcher = pattern.matcher(scanner.nextLine());
} catch (PatternSyntaxException pse) {
System.out.println("⚠ There is a problem with the regular expression!");
System.out.println("Pattern: " + pse.getPattern());
System.out.println("Description: " + pse.getDescription());
System.out.println("Message: " + pse.getMessage());
System.out.println("Error index: " + pse.getIndex());
continue; // 继续循环,让用户重新输入
}
boolean found = false;
while (matcher.find()) {
System.out.printf("Found \"%s\" at index %d to %d%n",
matcher.group(), matcher.start(), matcher.end());
found = true;
}
if (!found) {
System.out.println("No match found.");
}
}
}
}
4️⃣ 常见错误示例
假设用户输入了:
java
Enter your regex: ?i)
输出结果:
java
⚠ There is a problem with the regular expression!
Pattern: ?i)
Description: Dangling meta character '?'
Message: Dangling meta character '?' near index 0
?i)
^
Error index: 0
💡 分析:
- 错误原因:嵌入式标志缺少左括号
(i) getIndex()→ 0,说明问题出在正则的第 0 个字符getDescription()→ 提示是 Dangling meta character '?'getMessage()→ 提供可视化错误位置,非常直观
5️⃣ 小结
PatternSyntaxException非受检异常,用于捕获正则语法错误getDescription(),getIndex(),getPattern(),getMessage()是定位错误的核心方法- 捕获异常后,可以在控制台输出详细信息,帮助快速调试
- 常见错误包括:
- 缺少括号
- 错误的转义字符
- 悬空的元字符(如
?、*、+)