был написан код на Qt, где использовался класс QRegExp, потребовалось повторить то же самое в проекте на MFC в студии (2008). Я нашёл класс regex, правда нашёл не сразу, потому что он тут в области std::tr1 , а не просто в std . Нашёл, но не пойму, как повторить фишку с захватом групп, как в QRegExp
Например, в Qt отмеченные группы чётко вытаскиваются:
QRegExp rx(".*(a).*(b).*");
if(-1 != rx.indexIn("111a222b333",0) )
{
QStringList texts=rx.capturedTexts();
//texts[0]=="111a222b333" - тут всегда вся совпавшая строка
//texts[1]=="a" - тут первая группа
//texts[2]=="b" - вторая группа
}
а с regex
#include <regex>
...
std::tr1::regex rx(".*(a).*(b).*");
std::tr1::smatch m;
std::string s="111a222b333";
std::tr1::sregex_iterator it(s.begin(),s.end(),rx);
for(; it!=std::tr1::sregex_iterator(); it++)
{
std::string gr=it->str();
//gr==111a222b333
}
то есть итератор перечислит найденные в строке совпадения и всё. Никаких тебе групп. Получается, нужно будет в полном совпадении ещё парочкой поисков вытаскивать нужные значения ? Или я что-то пропустил и возможность захвата есть ?