453. Java 正则表达式 - 异常处理:PatternSyntaxException

文章目录

  • [453. Java 正则表达式 - 异常处理:`PatternSyntaxException`](#453. Java 正则表达式 - 异常处理:PatternSyntaxException)
    • [1️⃣ 什么是 `PatternSyntaxException`](#1️⃣ 什么是 PatternSyntaxException)
    • [2️⃣ 关键方法](#2️⃣ 关键方法)
    • [3️⃣ 示例:捕获正则表达式语法错误](#3️⃣ 示例:捕获正则表达式语法错误)
    • [4️⃣ 常见错误示例](#4️⃣ 常见错误示例)
    • [5️⃣ 小结](#5️⃣ 小结)

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️⃣ 小结

  1. PatternSyntaxException 非受检异常,用于捕获正则语法错误
  2. getDescription(), getIndex(), getPattern(), getMessage() 是定位错误的核心方法
  3. 捕获异常后,可以在控制台输出详细信息,帮助快速调试
  4. 常见错误包括:
    • 缺少括号
    • 错误的转义字符
    • 悬空的元字符(如 ?*+
相关推荐
默_笙1 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003961 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技1 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时2 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
奇思妙想聪明勤奋的小羊2 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1232 天前
2026年第38周GitHub趋势周报
python·科技·github