Mam problem z boost::regex::regex_match
. Pracuję z włączonym BOOST_REGEX_MATCH_EXTRA
.Zwiększ wyrażenie regularne. Nazwana grupa w dwóch częściach
Co mam:
(jest to prosty przykład mój problem, a nie prawdziwe zadanie)
string input1= "3 4 5";
string input2= "3 4 7";
Co chcę uzyskać:
list output1= [3 4 5];
list output2= []; //not matched
regex:
(to działa poprawnie)
((?<group>[0-6])[ ]?)*
OUTPUT1: what["group"]=5
i what["group"].captures()= [3, 4, 5]
OUTPUT2: not matched
p roblem to:
Potrzebuję zebrać dane z więcej niż jeden część regex do jednej grupy.
Próbowałem:
((?<group>[0-6])[ ])*(?<group>[0-6])
OUTPUT1: what["group"]=4
i what["group"].captures()=[3, 4]
output2: not matched
OK, rozumiem. Nie widzi drugiej deklaracji grupy.
Próbowałem:
((?<group>[0-6])[ ])*(?&group)
output1: what["group"]=4
i what["group"].captures()= [3, 4, 4]
output2: not matched
- Ale co to? Gdzie jest drugie 4? Sprawdza wzór "grupy", ponieważ pierwszy przykład pasuje, ale drugi nie. Ale podwaja ostatnią znalezioną wartość zamiast zapisywać nową. Czemu? Może zapomniałem włączyć flagi?
- Czy istnieje inny sposób na uzyskanie danych z jednej grupy z innej części wyrażenia regularnego?
mam więcej niż jedną grupę, tak token_iterator nie może mi pomóc.
Wyrażenie należy skonfigurować w pliku konfiguracyjnym. nie można użyć statycznego Xpressive.
Nie, nie można nadziać dwa różne części łańcucha jednej grupy docelowej do przechwytywania - przynajmniej nie bez jednoczesnego przechwytywania wszystko pomiędzy. –