Следующие попытки получить "a" из "A: a" и "b" из "B: b" и "c" из "C: c", выполнив поиск регулярных выражений в цикле.На первой итерации внешнего цикла во второй группе m появляется «a».Однако для второй итерации внешнего цикла в третьей группе m появляется «b».А для третьей итерации внешнего цикла «c» появляется в четвертой группе m.Это почему?Кроме того, первая итерация внешнего цикла имеет 4 группы по m.Это почему?Разве не должно быть двух групп?
std::string s = "abc\n"
"A:a\n"
"def\n"
"B:b\n"
"ghi\n"
"C:c\n\n"
"jkl\n";
std::regex p("\nA:\\s*([^\n]+)|\nB:\\s*([^\n]+)|\nC:\\s*([^\n]+)");
std::smatch m;
while (std::regex_search(s, m, p))
{
int count = 0;
for (auto x:m)
{
std::cout << count << "->" << x << ", ";
count++;
}
s = m.suffix().str();
}
Вывод
0->
A:a, 1->a, 2->, 3->, 0->
B:b, 1->, 2->b, 3->, 0->
C:c, 1->, 2->, 3->c,
Ожидаемый:
0->
A:a, 1->a, 0->
B:b, 1->b, 0->
C:c, 1->c,