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. 常见错误包括:
    • 缺少括号
    • 错误的转义字符
    • 悬空的元字符(如 ?*+
相关推荐
无限的鲜花8 小时前
反射(原创推荐)
java·开发语言
hhzz8 小时前
基于监控视频的水位尺自动识别技术方案与实现
python·opencv·yolo·图像识别·cv
yongche_shi8 小时前
ragas官方文档中文版(五十)
开发语言·python·ai·ragas·如何评估和改进 rag 应用
一路向北he8 小时前
字节钢铁军团--“提供情境,而非控制”
java·开发语言·前端
weixin_408099679 小时前
OCR批量识别图片方案:从手动处理到自动化API系统(Python/Java/PHP实战)
图像处理·python·ocr·文字识别·api调用·批量识别·石榴智能
AI行业学习10 小时前
Notepad++ 官方下载 + 完整安装 + 全套优化配置(2026最新)
开发语言·人工智能·python·前端框架·html·notepad++
大圣编程11 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
云烟成雨TD11 小时前
LangFlow 1.x 系列【5】可视化编辑页面功能说明
人工智能·python·agent
upgrador11 小时前
基础知识:C++ STL构造函数的左闭右开惯例及其实现原理
开发语言·c++
yoothey12 小时前
报废审批流规则引擎设计——责任链模式完整实现
linux·开发语言·bash