Thư viện <regex> trong C++ cung cấp các hằng số lỗi (error codes) để xác định loại lỗi xảy ra khi xử lý biểu thức chính quy. Các lỗi này được định nghĩa trong std::regex_constants.
Bảng mã lỗi regex phổ biến
| Mã lỗi (Flag) | Mô tả |
|---|---|
error_collate | Tên collation (sắp xếp) không hợp lệ trong regex |
error_ctype | Tên lớp ký tự (character class) không hợp lệ |
error_stack | Không đủ bộ nhớ để xác định khớp regex |
error_space | Thiếu bộ nhớ khi chuyển đổi sang máy trạng thái hữu hạn |
error_badrepeat | Toán tử lặp (*, ?, +, {) không đi sau biểu thức chính quy hợp lệ |
error_complexity | Độ phức tạp khớp regex vượt quá mức cho phép |
error_range | Khoảng ký tự không hợp lệ (ví dụ: [z-a]) |
error_badbrace | Ngoặc nhọn { và } không khớp |
error_brace | Khoảng không hợp lệ giữa { và } |
error_paren | Ngoặc tròn ( và ) không khớp |
error_brack | Ngoặc vuông [ và ] không khớp |
error_backref | Tham chiếu ngược (back reference) không hợp lệ |
error_escape | Ký tự escape không hợp lệ hoặc escape ở cuối chuỗi |
Ví dụ: Bắt và xử lý regex_error
#include <iostream>
#include <regex>
int main() {
try {
std::regex re("[A-Z][0"); // Lỗi: thiếu ']' đóng ngoặc vuông
} catch (const std::regex_error& err) {
std::cout << "Có lỗi xảy ra: " << err.what() << '\n';
if (err.code() == std::regex_constants::error_brack) {
std::cout << "Mã lỗi: error_brack (ngoặc vuông không khớp)\n";
}
}
}
Kết quả
Có lỗi xảy ra: Unexpected character in bracket expression. Mã lỗi: error_brack (ngoặc vuông không khớp)
Lưu ý
- Luôn bọc code regex trong
try-catchkhi pattern nhập từ người dùng - Sử dụng
err.code()để lấy mã lỗi cụ thể err.what()trả về mô tả lỗi dạng chuỗi