Heim > Artikel > Backend-Entwicklung > Warum gibt „std::match_results::size()“ 1 für einen regulären Ausdruck ohne Erfassungsgruppen zurück?
Größe von std::match_results
Frage:
Im folgenden C 11-Code , warum gibt match.size() 1 statt der erwarteten 3 zurück?
<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>
Antwort:
Die size()-Funktion von std::match_results gibt zurück die Anzahl der Erfassungsgruppen plus 1, was die vollständige Übereinstimmung angibt. In diesem Fall gibt es keine Erfassungsgruppen, daher beträgt die Größe 1.
Erklärung:
Die Funktion regex_search findet das erste Vorkommen des regulären Ausdrucks in der Eingabe Zeichenfolge. In diesem Fall wird „abc“ am Anfang der Zeichenfolge gefunden. Das Matches-Objekt enthält Informationen über die Übereinstimmung, einschließlich Capture-Gruppen.
Der bereitgestellte reguläre Ausdruck enthält jedoch keine Capture-Gruppen. Capture-Gruppen sind Klammern im regulären Ausdruck, die bestimmten Teilen der Eingabezeichenfolge entsprechen. Wenn Erfassungsgruppen verwendet würden, würde match.size() die Anzahl der Erfassungsgruppen plus 1 zurückgeben.
Mehrere Übereinstimmungen finden:
Um mehrere Übereinstimmungen zu finden, können Sie Folgendes tun Verwenden Sie einen alternativen Ansatz, der die Übereinstimmungen durchläuft:
<code class="cpp">int main() { std::regex r("abc"); std::string s = "abcdefabcghiabc"; int i = 0; std::sregex_iterator it(s.begin(), s.end(), r); std::sregex_iterator end; while (it != end) { std::smatch m = *it; std::cout << i++ << ": " << m.str() << std::endl; it++; } return 0; }</code>
Dieser Code gibt aus:
0: abc 1: abc 2: abc
Das obige ist der detaillierte Inhalt vonWarum gibt „std::match_results::size()“ 1 für einen regulären Ausdruck ohne Erfassungsgruppen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!