Heim >Backend-Entwicklung >C++ >Wie kann ich mit „std::regex' von C effizient mehrere Wörter aus einer Zeichenfolge extrahieren?

Wie kann ich mit „std::regex' von C effizient mehrere Wörter aus einer Zeichenfolge extrahieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-15 08:17:16450Durchsuche

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

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!

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