2015-03-30 5 views
1

Учитывая, что этот код работает:станд :: 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

Try, чтобы заменить '{2}' (плюс пространство, оставленное от '{') с '{2}' или '' -' с \ - '. – Xufox

+0

@Xufox ничего себе, чувак, ты абсолютно прав! Эта часть регулярного выражения (- \ d \ d) {2} должна быть записана как (- \ d \ d) {2} –

+0

@Xufox спасибо :) Я потратил час на эту крошечную крошечную ошибку. –

ответ

3

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

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

должен быть

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

иначе {2} относится к пространству вместо (-\d\d), и другие странные вещи могут случиться, как хорошо ...

2

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

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

To:

regex r{ R"(\d{2,3}(-\d\d){2})" }; 
Смежные вопросы