c ++ std :: regex, smatch сохраняет подвыражения только один раз для их появления в строке шаблона

У меня есть следующий код:

    int main()
    {
        regex reg_expr("(\\([A-Z],[A-Z]\\))(?:\\s(\\([A-Z],[A-Z]\\)))*");
        //regex reg_expr("(\\([A-Z],[A-Z]\\))(?:\\s(\\([A-Z],[A-Z]\\)))*\\s(\\([A-Z],[A-Z]\\))");
        smatch sm;
        string input("(A,B) (C,D) (F,W) (G,K) (R,M)");
        //string input("(A,B) (C,D) (F,W)");
        if (regex_match(input, sm, reg_expr)) {
            cout << "true\n";
            cout << sm.size() << "\n";
            for (int i = 0; i < sm.size(); i++) {
                //if (sm[i].length())
                    cout << "submatch number " << i << ": " << sm[i].str() << '\n';
            }
        } else
            cout << "false";
    return 0;
    }

Все работает нормально, за исключением того, что у «smatch sm» есть только одна подстрока для каждого подвыражения, указанного в строке регулярного выражения. Например, для следующей тестовой строки:

 (A,B) (C,D) (F,W) (G,K) (R,M)

который правильно сопоставлен с

 (\([A-Z],[A-Z]\))(?:\s(\([A-Z],[A-Z]\)))*

В регулярном выражении «sm» содержит только древовидные подстроки: одна для всей строки, а две другие - «(A, B)» и «(R, M)», «(C, D)», « (F, W) "," (G, K) "отсутствуют, но они совпадают.

Похоже,(?:\s(\([A-Z],[A-Z]\)))* Под регулярным выражением правильно понимается, что 0 или более подвыражений должны совпадать, но, по-видимому, существует ошибка, что только одно подвыражение сохраняется вstd::smatch sm.
Это ошибка библиотеки (которая менее вероятна) или я делаю что-то не так? Ваша помощь и совет приветствуются!

Ответы на вопрос(1)

Ваш ответ на вопрос