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