Nieoczekiwane działanie std regex'a

0

Cześć,

mam taki kod:

#include <string>
#include <regex>
#include <iostream>
using namespace std;

int main()
{
    string line = "19576 1028 16651 198814 4 5050 6894 0 0 0";
 
    regex regexp("(\\d+) (\\d+) (\\d+) (\\d+) (\\d+) (\\d+) (\\d+) (\\d+) (\\d+) (\\d+)"); 
   
    smatch m; 
    regex_search(line, m, regexp); 
  
    cout << "match size: " << m.size() << endl;
    for (auto i = 0u; i < m.size(); ++i)
         cout << m.str(i) << " "; 
    return 0; 
}

Powyższy kod daje output:

match size: 11
19576 1028 16651 198814 4 5050 6894 0 0 0 19576 1028 16651 198814 4 5050 6894 0 0 0

Czy ktoś mi może wytłumaczyć:

  • Czemu tych liczb w outpucie jest więcej niż 11?
  • Jak z powyższego wejścia po prostu odczytać te dziesięć liczb bez żadnych błędów i powtórzeń?

Pozdro!

3

m.str(0) to jest chyba cała grupa, zacznij iterację od 1.

5

Masz 10 dopasowanych grup + dopasowane całe wyrażenie.

5

Polecam czytać dokumentację:
std::regex_match - cppreference.com

If the match exists:

m.ready() true
m.empty() false
m.size() number of marked subexpressions plus 1, that is, 1+e.mark_count()

I jeszcze wystarczyło inaczej wyświetlić wynik: https://godbolt.org/z/cWP1MdTfE

0

Racja, dzięki. Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1