Heim > Backend-Entwicklung > C++ > Wie kann ich mit std::regex von C effizient mehrere Regex-Übereinstimmungen aus einem String extrahieren?

Wie kann ich mit std::regex von C effizient mehrere Regex-Übereinstimmungen aus einem String extrahieren?

Linda Hamilton
Freigeben: 2024-11-29 21:23:11
Original
421 Leute haben es durchsucht

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

Abgleichen mehrerer Regex-Ergebnisse mit std::regex

Das Abgleichen mehrerer Vorkommen eines regulären Ausdrucksmusters in einer Zeichenfolge kann mit std erreicht werden: :regex-Bibliothek. Stellen Sie sich ein Szenario vor, in dem wir jedes Wort aus der Zeichenfolge „erstes zweites drittes viertes“ in einem einzigen Vorgang extrahieren möchten.

Der erste Versuch, „(bS*b){0,}“ zu verwenden, ergab nicht gewünschte Ausgabe, da der Wiederholungsoperator {0,} mit null oder mehr Vorkommen, einschließlich keinem, übereinstimmt, was zu leeren Übereinstimmungen führt.

Um dieses Problem zu beheben, können wir eine Technik namens Lazy Iteration anwenden. Dies beinhaltet das Durchlaufen der Zeichenfolge während der Durchführung von Regex-Suchen. Hier ist ein Beispielcode:

#include <iostream>
#include <string>
#include <regex>

int main() {
    std::regex exp("(\b\S*\b)");
    std::smatch res;
    std::string str = "first second third forth";

    std::string::const_iterator searchStart(str.cbegin());
    while (std::regex_search(searchStart, str.cend(), res, exp)) {
        std::cout << (searchStart == str.cbegin() ? "" : " ") << res[0];
        searchStart = res.suffix().first;
    }
    std::cout << std::endl;
}
Nach dem Login kopieren

In diesem Code durchlaufen wir die Zeichenfolge mit „searchStart“, die den Startpunkt der nächsten potenziellen Übereinstimmung darstellt. Nach jeder erfolgreichen Übereinstimmung wird searchStart bis zum Ende der übereinstimmenden Teilzeichenfolge aktualisiert. Dadurch können wir weiter nach nachfolgenden Übereinstimmungen suchen, bis die gesamte Zeichenfolge verarbeitet wurde. Die Ausgabe dieses Codes ist:

first second third forth
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich mit std::regex von C effizient mehrere Regex-Übereinstimmungen aus einem String 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