Czy jest jakaś różnica między regex_token_iterator a regex_iterator?Jaka jest różnica między regex_token_iterator a regex_iterator?
Wygląda na to, że obaj wykonują tę samą pracę, ale nie są pewni, która z nich jest lepsza?
Czy jest jakaś różnica między regex_token_iterator a regex_iterator?Jaka jest różnica między regex_token_iterator a regex_iterator?
Wygląda na to, że obaj wykonują tę samą pracę, ale nie są pewni, która z nich jest lepsza?
Tam jest rzeczywiście różnica między nimi, jeśli spojrzymy na cppreference opisuje std::regex_iterator następująco:
std :: regex_iterator jest tylko do odczytu ForwardIterator że dostęp do poszczególnych meczów wyrażenia regularnego wewnątrz instrumentu bazowego sekwencja znaków.
i std::regex_token_iterator jak:
std :: regex_token_iterator jest tylko do odczytu ForwardIterator że dostęp poszczególne podgrupy mecze każdym meczu wyrażenia regularnego w ramach podstawowej sekwencji znaków. Może być również używany do uzyskiwania dostępu do części sekwencji, które nie były dopasowane przez dane wyrażenie regularne (np. Jako tokenizator).
Więc std::regex_token_iterator
pozwala również dopasować non-dopasowane tokeny lub sub-wyrażenie n-th
.
Sekcja cppreference dla std::regex_token_iterator
że połączone powyżej opisuje typową realizację następująco:
Typowa implementacja std :: regex_token_iterator posiada podstawowej std :: regex_iterator, pojemnik (np std :: wektor) z żądanych indeksów submatch, wewnętrzny licznik równy indeksowi podtypu, wskaźnik do std :: sub_match, wskazujący na bieżący podtyp bieżącego dopasowania oraz obiekt std :: match_results zawierający ostatnia nie dopasowana sekwencja znaków (używana w tokenizerze ).
Książka The C++ Standard Library wyjaśnia w 14.4
Regex Token iteratory następująco:
regex iterator pomaga iteracyjne nad dopasowane podsekwencje. Jednak czasami trzeba także przetworzyć całą zawartość między dopasowanymi wyrażeniami . [...] Ponadto, można określić listę integralnych wartości, które stanowią elementy „tokeny”:
- -1 oznacza, że jesteś zainteresowany wszystkich podciągów między dopasowanych wyrażeń regularnych (żeton separatory).
- 0 oznacza, że jesteś zainteresowany wszystkimi dopasowanymi wyrażeniami regularnymi (separatorami tokenów).
- Każda inna wartość n oznacza, że interesuje Cię pasujące n-ty podwyrażenie wewnątrz wyrażeń regularnych.
Witryna książki zapewnia przykładowy kod dla sregex_token_iterator i sregex_iterator, który powinien być również pomocne.
Jeśli odpowiedź @ ShafikYaghmoura rozwiązała Twój problem, zaakceptuj go. Osobiście uważam, że jest to bardzo dobra odpowiedź. –