Heim > Backend-Entwicklung > C++ > Wie kann ich mit std::regex von C alle Wörter in einer Zeichenfolge abgleichen?

Wie kann ich mit std::regex von C alle Wörter in einer Zeichenfolge abgleichen?

Mary-Kate Olsen
Freigeben: 2024-12-11 08:54:09
Original
748 Leute haben es durchsucht

How Can I Match All Words in a String Using C  's std::regex?

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage