Mehrere Ergebnisse mit std::regex abgleichen
In diesem Artikel wird ein Szenario beschrieben, in dem ein Benutzer versucht, jedes Wort in einer bestimmten Zeichenfolge mit abzugleichen die Regex-Engine der C-Standardbibliothek (std::regex). Der Benutzer verwendet das Regex-Muster „(bS*b)“, um dies zu erreichen, stößt jedoch auf unerwartetes Verhalten.
Das Problem
Das ursprüngliche Regex-Muster stellte „( bS*b)“ kapselt Wörter, die durch Wortgrenzen (b) und Nicht-Leerzeichen (S) begrenzt sind. In Kombination mit der Funktion regex_search berücksichtigt dieses Muster jedoch nicht mehrere potenzielle Übereinstimmungen innerhalb der Eingabezeichenfolge.
Die Lösung
Um dieses Problem zu beheben, ist es so Es ist erforderlich, die Eingabezeichenfolge zu durchlaufen und gleichzeitig regex_search kontinuierlich anzuwenden. Dadurch wird sichergestellt, dass alle Übereinstimmungen erkannt und erfasst werden können. Der untenstehende modifizierte Code veranschaulicht diesen Ansatz:
{ 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; }
In diesem überarbeiteten Code wird ein Iterator, searchStart, am Anfang der Eingabezeichenfolge initialisiert. Die Funktion regex_search wird iterativ aufgerufen, wobei searchStart als Startposition für die Suche dient. Wenn eine Übereinstimmung gefunden wird, wird die Übereinstimmung gedruckt und searchStart wird an die Position nach dem übereinstimmenden Text angepasst. Dieser Vorgang wird fortgesetzt, bis keine Übereinstimmungen mehr gefunden werden können.
Das obige ist der detaillierte Inhalt vonWie kann ich mit std::regex von C alle Wörter in einer Zeichenfolge abgleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!