Класс regex_error
Класс regex_error является наследником класса std::runtime_error
и используется библиотекой <regex> для сообщения об ошибках,
возникших при работе с регулярными выражениями. Исключение может
быть выброшено как на этапе компиляции шаблона регулярного выражения
(например, при создании объекта std::regex), так и на этапе
его выполнения (например, при вызове std::regex_match или
std::regex_search с флагом std::regex_constants::match_any).
Метод code возвращает объект типа std::regex_constants::error_type,
который указывает на конкретную причину ошибки.
Синтаксис
#include <regex>
class regex_error : public std::runtime_error {
public:
explicit regex_error(std::regex_constants::error_type e);
std::regex_constants::error_type code() const noexcept;
};
Пример
Давайте попробуем создать регулярное выражение с некорректным
синтаксисом, чтобы увидеть, как выбрасывается исключение regex_error:
#include <iostream>
#include <regex>
using namespace std;
int main()
{
try {
regex re("[abc");
cout << "OK" << endl;
}
catch (const regex_error& e) {
cout << "Error: " << e.what() << endl;
cout << "Code: " << e.code() << endl;
}
return 0;
}
Результат выполнения кода:
"Error: regex_error"
"Code: 4"
Пример
Давайте обработаем ошибку и выведем её текстовое описание
в зависимости от кода, возвращённого методом code:
#include <iostream>
#include <regex>
using namespace std;
int main()
{
try {
regex re("(abc");
cout << "OK" << endl;
}
catch (const regex_error& e) {
cout << "Caught regex_error" << endl;
if (e.code() == regex_constants::error_paren) {
cout << "Unmatched parenthesis" << endl;
}
else if (e.code() == regex_constants::error_brack) {
cout << "Unmatched bracket" << endl;
}
else {
cout << "Other error" << endl;
}
}
return 0;
}
Результат выполнения кода:
"Caught regex_error"
"Unmatched parenthesis"
Смотрите также
-
класс
regex,
который представляет регулярное выражение -
функция
regex_match,
которая проверяет соответствие строки шаблону -
функция
regex_search,
которая ищет первое вхождение шаблона в строке -
функция
regex_replace,
которая заменяет вхождения шаблона в строке