1
Я компиляции следующий код с VS2013:VS2013, regex. Почему я получаю «итераторы строк несовместимыми»?
if (std::regex_match(string("10-11-1982 11:22:31"), match, std::regex("(\\d{2}-\\d{2}-\\d{4} \\d{2}:\\d{2}:\\d{2})"))) {
std::cout << "Match size:" << match.size() << std::endl;
for (size_t i = 0; i < match.size(); ++i) {
std::ssub_match sub_match = match[i];
std::string piece = sub_match.str(); // <-- Interrumption here
std::cout << " submatch " << i << ": " << piece << '\n';
}
}
Когда комментировал линия выполнена появится следующее диалоговое окно:
Что случилось с моим кодом?
Спасибо. Кстати, почему есть 2 матча? –
Есть две группы, возвращающие соответствие регулярному выражению: 0-я группа, равная целой подстроке, а первая - подстрока, скопированная скобкой части вашего шаблона (вы устанавливаете его на все соответствие). Я думаю, что в этом случае группа захвата является избыточной, удалите круглые скобки. –