Heim >Backend-Entwicklung >C++ >Wie kann ich mit std::regex effizient mehrere passende Wörter aus einer Zeichenfolge extrahieren?

Wie kann ich mit std::regex effizient mehrere passende Wörter aus einer Zeichenfolge extrahieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-30 13:55:14201Durchsuche

How Can I Efficiently Extract Multiple Matching Words from a String Using std::regex?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn