你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式错误

2021/11/4 6:51:27

1. 指定或使用正则表达式时的错误

如果我们编写的正则表达式存在错误, 则在运行时标准库会抛出一个类型为regex 的异常

eg.

try {
    // alnum右括号少了一个, 构造函数会抛出异常
    regex r("[[:alnum:] + \\.(cpp | cxx | cc)$", regex::icase);
} catch (regex_error e) {
    cout << e.what() << "\ncode: " << e.code() << endl;
}
输出:
regex_error (error_brack) :
The expression contained mismatched [ and ] .
code: 4

1.1 正则表达式错误类型

类型描述
error_collate无效的元素校对请求
error_ctype无效的字符类
error_escape无效的转义字符或无效的尾置转义
error_backref无效的向后引用
error_brack不匹配的方括号([或])
error_paren不匹配的小括号((或))
error_brace不匹配的花括号({或})
error_badbrace{}中无效的范围
error_range无效的字符范围(如[z-a])
error_space内存不足,无法处理此正则表达式
error_badrepeat重复字符(*、?、+或{)之前没有有效的正则表达式
error_complexity要求的匹配关于复杂
error_stack栈空间不足,无法处理匹配
  • code 成员编号从0开始

  • 应该努力避免创建很多不必要的regexo,特别是, 如果你在一个循环中使用正则表达式, 应该在循环外创建它,而不是在每步迭代时都编译它
    (构造一个 regex 对象以及向一个已存在的 regex 賦予一个新的正则表达式可能是非常耗时的。 为了最小化这种开销)