Ich habe ein Problem mit boost::regex::regex_match
. Ich arbeite mit eingeschaltet BOOST_REGEX_MATCH_EXTRA
.Boost Regex. Benannte Gruppe in zwei Teilen
Was ich habe:
(dies ist ein einfaches Beispiel für mein Problem, nicht eine echte Aufgabe)
string input1= "3 4 5";
string input2= "3 4 7";
Was ich zu bekommen:
list output1= [3 4 5];
list output2= []; //not matched
regex:
(dies ok arbeitet)
((?<group>[0-6])[ ]?)*
output1: what["group"]=5
und what["group"].captures()= [3, 4, 5]
output2: not matched
Der p Problem ist:
Ich muss Daten von mehr als eine Teil von Regex zu einer Gruppe sammeln.
Ich habe versucht:
((?<group>[0-6])[ ])*(?<group>[0-6])
output1: what["group"]=4
und what["group"].captures()=[3, 4]
output2: not matched
OK, ich verstehe. Es wird keine zweite Gruppenerklärung angezeigt.
Ich habe versucht:
((?<group>[0-6])[ ])*(?&group)
output1: what["group"]=4
und what["group"].captures()= [3, 4, 4]
output2: not matched
- Aber was dieses? Woher kommt die zweite 4? Es überprüft das "Gruppen" -Muster, weil das erste Beispiel übereinstimmt, das zweite jedoch nicht. Aber es verdoppelt den zuletzt gefundenen Wert, anstatt neu zu speichern. Warum? Vielleicht habe ich vergessen, ein paar Flaggen zu drehen?
- Und gibt es eine andere Möglichkeit, in einer Gruppe Daten aus verschiedenen Teilen von Regex-Ausdruck zu bekommen?
Ich habe mehr als eine Gruppe, so token_iterator kann mir nicht helfen.
Und Ausdruck sollte in der Konfigurationsdatei konfiguriert werden. Statisches Xpressive kann nicht verwendet werden.
Nein, Sie nicht zwei verschiedene Teile einer Zielzeichenfolge in einer Capture-Gruppe stopfen kann - ohne auch zumindest nicht alles zwischen einzufangen. –