Heim >Backend-Entwicklung >C++ >Wie kann ich mit std::regex effizient mehrere passende Wörter aus einer Zeichenfolge extrahieren?
Mehrere Ergebnisse mit std::regex abgleichen: Eine effektive Lösung
Schwierigkeiten beim Extrahieren mehrerer übereinstimmender Wörter aus einer Zeichenfolge mit std:: Regex? Ein häufiges Missverständnis besteht darin, das Muster „(bS*b){0,}“ zu verwenden, um Wörter in einem einzigen Vorgang abzugleichen. Dieser Ansatz greift jedoch aufgrund des optionalen Quantifizierers {0,} innerhalb des Musters zu kurz.
Bewältigung der Herausforderung
Um dieses Problem anzugehen und mehrere Ergebnisse erfolgreich abzugleichen std::regex ist es wichtig, keine optionalen Quantifizierer zu verwenden. Betrachten Sie stattdessen den folgenden Code:
regex exp("(\b\S*\b)"); smatch res; string str = "first second third forth"; string::const_iterator searchStart( str.cbegin() ); while ( regex_search( searchStart, str.cend(), res, exp ) ) { cout << ( searchStart == str.cbegin() ? "" : " " ) << res[0]; searchStart = res.suffix().first; } cout << endl;
Verstehen der Lösung
Dieser aktualisierte Ansatz beinhaltet das Durchlaufen der Eingabezeichenfolge, während regex_search wiederholt ausgeführt wird. Es initialisiert die Suchstartposition innerhalb der Zeichenfolge und sucht weiter nach Mustern, bis keine weiteren Übereinstimmungen mehr gefunden werden. Bei jeder erfolgreichen Übereinstimmung wird die Startposition der Suche auf die Position unmittelbar nach dem übereinstimmenden Wort aktualisiert.
Vorteile dieses Ansatzes
Diese optimierte Lösung macht die Verwendung von Erfassungsgruppen überflüssig. Dies ist effizienter und stellt sicher, dass alle Wörter in der Eingabezeichenfolge extrahiert und in der Ausgabe durch Leerzeichen getrennt werden.
Das obige ist der detaillierte Inhalt vonWie kann ich mit std::regex effizient mehrere passende Wörter aus einer Zeichenfolge extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!