Ich würde gerne alle möglichen Übereinstimmungen von Regex finden, wie ist es möglich?
%Vor%Gibt die Ausgabe aus:
%Vor% Aber kann nicht das dritte 2: 2
genau finden. Ich bevorzuge Regex wegen O(n)
Komplexität für die Suche nach mehreren Token gleichzeitig.
UPDATE:
Vielleicht die Token-Liste in nicht-präfixierbare Listen aufteilen und mehrere Regexes erstellen? Zum Beispiel: (2|4|25|45|251|455|267)
= & gt; (2|4)
, (25|45|267)
, (251|455)
Dies erhöht die Komplexität auf etwas wie O(n log(m))
UPDATE 2:
Bitte geben Sie einen kurzen STL-basierten Algorithmus zum Aufteilen des Token-Vektors auf nicht vorstellbare Vektoren an, um diese Frage zu beantworten.
Ich denke nicht, dass es mit einem Iterator und einem einzelnen Regexp möglich ist. So funktioniert das.
Ihr regexp sucht nach einem Teilstring, der entweder "2" oder "25" ist. Jetzt starten Sie die Suche mit sregex_iterator
. Es beginnt mit dem ersten Symbol der Zeichenfolge und versucht, Übereinstimmung mit Ihrem regulären Ausdruck zu finden. Wenn es eine Übereinstimmung gibt, wird sie "aufgezeichnet" und der Iterator wird auf die Position nach der Übereinstimmung vorgeschoben. Wenn keine Übereinstimmung vorhanden ist, wird der Iterator um 1 Position nach vorne verschoben. Dieser Prozess wird fortgesetzt, bis das Ende der Zeichenfolge erreicht ist.
Nun wird jedes Mal, wenn es eine Übereinstimmung findet, versucht, die beste (d. h. längste) Übereinstimmung mit Ihrem regulären Ausdruck zu finden. Wenn also ein Teilstring sowohl mit 2
als auch mit 25
übereinstimmt, wird 25
benötigt, da er länger ist. Ich würde sagen, du brauchst 2 reguläre Ausdrücke.