Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Lỗi regex (regex_error) trong C++

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_collateTên collation (sắp xếp) không hợp lệ trong regex
error_ctypeTên lớp ký tự (character class) không hợp lệ
error_stackKhông đủ bộ nhớ để xác định khớp regex
error_spaceThiếu bộ nhớ khi chuyển đổi sang máy trạng thái hữu hạn
error_badrepeatToá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_rangeKhoảng ký tự không hợp lệ (ví dụ: [z-a])
error_badbraceNgoặc nhọn { và } không khớp
error_braceKhoảng không hợp lệ giữa { và }
error_parenNgoặc tròn ( và ) không khớp
error_brackNgoặc vuông [ và ] không khớp
error_backrefTham chiếu ngược (back reference) không hợp lệ
error_escapeKý 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-catch khi 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