Когда я запускаю этот код:программы Regex не ловли исключения, другие проблемы
#include <iostream>
#include <regex>
using namespace std;
main() {
const string source = "hello(abc_def)";
const regex regexp("he(l)lo.*");
smatch m;
if (regex_match(source, m, regexp)) {
cout << "Found, group 1 = " << m[1].str() << endl;
} else {
cout << "Not found" << endl;
}
const regex regexp2("hello\\((\\w+)\\)");
try {
if (regex_match(source, m, regexp2)) {
cout << "Found, group 1 = " << m[1].str() << endl;
} else {
cout << "Not found" << endl;
}
} catch(const exception& exc) {
cout << "Got exception: " << exc.what() << endl;
}
}
вывод:
Found, group 1 = el
terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
сопровождается диалогового окна, которое разбивая программы. Я использую g ++ в Windows, 4.8.1 (да, я указал -std=c++11
), и я понимаю, что материал регулярного выражения все еще был экспериментальным до 4.9, так что это могло объяснить, почему первая группа захвата неверна и почему она могла быть проблема со вторым регулярным выражением. Я все еще обеспокоен тем, почему он сказал, что он бросает std::regex_error
, но мой код не поймал его. Изменение exception&
до regex_error&
в предложении catch
не изменило поведения. Все эти ошибки библиотеки, или я сделал что-то неправильно? Я пытаюсь выучить C++ после того, как не использовал его в течение 15 лет или около того (а также пытаюсь изучить C++ 11), поэтому я обеспокоен тем, что мог сделать что-то немое.
ОК, спасибо. Это выглядит глупой ошибкой с моей стороны, но, с другой стороны, он-лайн ссылки на C++, которые я нашел, даже не упоминают о возможности бросать regex_error, не говоря уже о том, чтобы сказать мне, в какой момент он будет выброшен, поэтому Я не мог сказать. – ajb