Nieoczekiwane działanie std regex'a

Nieoczekiwane działanie std regex'a
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Postów:62
0

Cześć,

mam taki kod:

Kopiuj
#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!

edytowany 1x, ostatnio: cerrato
Paweł Biernacki
  • Rejestracja:ponad 5 lat
  • Ostatnio:12 dni
  • Postów:176
3

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

hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:2 dni
5

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


MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:4 minuty
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


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Postów:62
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.