Mehrere Ergebnisse mit std::regex abgleichen
Das Abgleichen mehrerer Vorkommen von Wörtern in einer Zeichenfolge kann mit regulären Ausdrücken eine Herausforderung sein. Obwohl der Ausdruck „(bS*b){0,}“ scheinbar mit allen aufeinanderfolgenden Wörtern in einer Zeichenfolge übereinstimmt, liefert er möglicherweise nicht die gewünschte Ausgabe. Stattdessen wird ein iterativer Ansatz empfohlen.
Es folgt der überarbeitete Code:
#include <iostream> #include <string> #include <regex> 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; return 0; }
In diesem aktualisierten Code verwenden wir eine While-Schleife, um die Zeichenfolge zu durchlaufen, während wir Suchen nach regulären Ausdrücken durchführen. Die Schleife beginnt damit, dass der searchStart-Iterator auf den Anfang der Zeichenfolge gesetzt wird. Dann, innerhalb jeder Iteration:
Von Indem wir die Zeichenfolge durchlaufen, bis keine Übereinstimmungen mehr gefunden werden, können wir alle Wörter einzeln ausgeben.
Das obige ist der detaillierte Inhalt vonWie kann ich mit „std::regex' von C effizient mehrere Wörter in einer Zeichenfolge zuordnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!