Heim > Artikel > Backend-Entwicklung > Wie viele Elemente gibt std::match_results::size() in C zurück?
Was gibt std::match_results::size() zurück?
In C 11 ist std::match_results::size( )-Funktion gibt die Anzahl der Erfassungsgruppen innerhalb eines Match-Ergebnisobjekts plus eins (den gesamten Match-Wert) zurück.
Bedenken Sie Folgendes Code:
<code class="cpp">#include <iostream> #include <string> #include <regex> int main() { std::string haystack("abcdefabcghiabc"); std::regex needle("abc"); std::smatch matches; std::regex_search(haystack, matches, needle); std::cout << matches.size() << std::endl; }</code>
Dieser Code findet das erste Vorkommen der Teilzeichenfolge „abc“ in der Zeichenfolge „abcdefabcghiabc“ und speichert das Übereinstimmungsergebnis im Übereinstimmungsobjekt. Überraschenderweise gibt der Aufruf von matches.size() 1 statt 3 zurück (die erwartete Anzahl an Übereinstimmungen).
Dieses Verhalten wird durch die Tatsache erklärt, dass regex_search() nur eine Übereinstimmung zurückgibt und size() beide vollständigen Übereinstimmungen enthält Match und alle Capture-Gruppen. In diesem Fall gibt es keine Erfassungsgruppen, daher gibt size() 1 zurück (nur vollständige Übereinstimmung).
Mehrere Übereinstimmungen finden
Um mehrere Übereinstimmungen zu finden und zu zählen, Verwenden Sie std::sregex_iterator oder std::wsregex_iterator (für breite Zeichenfolgen). Hier ist ein Beispiel mit std::sregex_iterator:
<code class="cpp">#include <iostream> #include <string> #include <regex> using namespace std; int main() { std::regex r("abc"); std::string s = "abcdefabcghiabc"; int count = 0; for (std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r); i != std::sregex_iterator(); ++i) { count++; } cout << "Number of matches: " << count << endl; }</code>
Dieser Code iteriert über alle Übereinstimmungen von „abc“ in der Zeichenfolge und zählt sie.
Gruppen erfassen
Wenn Ihr regulärer Ausdruck Erfassungsgruppen (in Klammern gesetzte Unterausdrücke) enthält, umfasst die Größe des Übereinstimmungsergebnisses die Erfassungsgruppen sowie. Wenn Sie beispielsweise einen regulären Ausdruck haben, der mit „abc(def)“ übereinstimmt und die Eingabezeichenfolge „abcdef“ enthält, beträgt die Größe des Übereinstimmungsergebnisses 2 (vollständige Übereinstimmung und Erfassungsgruppe „def“).
Das obige ist der detaillierte Inhalt vonWie viele Elemente gibt std::match_results::size() in C zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!