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

Wie kann ich mit „std::regex' von C effizient mehrere Wörter aus einer Zeichenfolge extrahieren?

Barbara Streisand
Freigeben: 2024-12-15 08:17:16
Original
447 Leute haben es durchsucht

How Can I Efficiently Extract Multiple Words from a String Using C  's `std::regex`?

Mehrere Ergebnisse mit std::regex abgleichen

Mehrere Ergebnisse mit std::regex abgleichen kann eine bequeme Möglichkeit sein, mehrere Teile davon zu extrahieren Daten aus einer Zeichenfolge in einem einzigen Vorgang. Der bereitgestellte reguläre Ausdruck „(bS*b){0,}“ eignet sich jedoch nicht zum Abgleichen jedes Wortes in der Zeichenfolge „erstes zweites drittes viertes“.

Lösung:

Das Problem mit dem ursprünglichen regulären Ausdruck besteht darin, dass der Quantor {0,} null oder mehrmals zutrifft, wodurch das Muster leere Zeichenfolgen abgleichen kann. Stattdessen sollte ein Quantifizierer verwendet werden, der einmal oder mehrmals übereinstimmt, z. B. „{1,}“ oder „ “.

Zusätzlich muss der reguläre Ausdruck wiederholt angewendet werden, um jedes Wort in der Zeichenfolge abzugleichen , wobei jedes Mal von der Position nach der vorherigen Übereinstimmung aus gesucht wird. Dies kann mithilfe einer Schleife erreicht werden, bei der regex_search über die Zeichenfolge iteriert.

Überarbeiteter Code:

Hier ist ein überarbeiteter Code, der die notwendigen Änderungen implementiert:

#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main()
{
    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

Dieser Code wendet den regulären Ausdruck iterativ auf die Zeichenfolge an und gibt jedes passende Wort durch Leerzeichen getrennt aus. Die Ausgabe lautet:

first second third forth
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich mit „std::regex' von C effizient mehrere Wörter aus einer Zeichenfolge extrahieren?. 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