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 賦予一个新的正则表达式可能是非常耗时的。 为了最小化这种开销)