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
Linda HamiltonOriginal
2024-11-29 21:23:11414Durchsuche

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;
}

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

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!

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