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!