исключение std :: regex_error, генерируемое во время выполнения

Учитывая, что этот код работает:

regex r1{ "fish"s };
smatch m1;
if (regex_search("I love fish and chips"s, m1, r1))
cout << m1[0] << endl;

Я считаю, что VS2015 поддерживает регулярные выражения. Однако, инициализация этого объекта регулярного выражения:

regex r{ R"(\d{2,3}(-\d\d) { 2 })" };

бросает std::regex_error исключение. Что не так с инициализацией?

1

Решение

Итак, да, как уже упоминалось в комментариях:

(\d{2,3}(-\d\d) { 2 })

должно быть

(\d{2,3}(-\d\d){2})

в противном случае {2} относится к пространству вместо (-\d\d)и другие странные вещи могут произойти также …

3

Другие решения

У вас есть опечатка в вашем регулярном выражении. Изменить это:

regex r{ R"(\d{2,3}(-\d\d) { 2 })" };

Для того, чтобы:

regex r{ R"(\d{2,3}(-\d\d){2})" };
2

По вопросам рекламы [email protected]