Sto cercando di analizzare una stringa di input utilizzando un'espressione regolare. Sto riscontrando un problema quando tento di catturare un gruppo ripetuto. Mi sembra sempre che ci sia l'ultima istanza del gruppo. Ho provato a usare quantificatori riluttanti (non avidi), ma mi sembra che manchi qualcosa. Qualcuno può aiutare?Come posso acquisire tutte le corrispondenze di un gruppo ripetuto con Boost :: regex_search?
espressione regolare cercato:
(OS)\\s((\\w{3})(([A-Za-z0-9]{2})|(\\w{3})(\\w{3}))\\/{0,1}){1,5}?\\r
(OS)\\s((\\w{3}?)(([A-Za-z0-9]{2}?)|(\\w{3}?)(\\w{3}?))\\/{0,1}?){1,5}?\\r
stringa di input:
OS BENKL/LHRBA/MANQFL\r\n
mi sembra sempre di ottenere ultimo gruppo, che è il gruppo MANQFL (MAN QFL)
, e il mio scopo è quello di ottenere tutti e tre i gruppi (non ci può essere 1-5 gruppi):
(BEN KL) , (LHR BA) and (MAN QFL).
C++ frammento di codice:
std::string::const_iterator start = str.begin(), end = str.end();
while(regex_search(start,end,what,expr))
{
cout << what[0];
cout << what[1];
...
start += what.position() + what.length();
}
Questo ciclo si eccita solo una volta, mentre mi aspetto che venga eseguito 3 volte in questo esempio. Qualsiasi aiuto sarà molto apprezzato.
Sarebbe di grande aiuto se tu ci dicessi di più sul formato dell'input e su come lo vuoi analizzare. –
Input è il flusso di stringhe e in questo esempio mi aspetto di ottenere 3 gruppi (BEN KL), (LHR BA) e (MAN QFL). So che in questo caso possiamo farlo anche senza usare espressioni regolari, ma sto solo cercando di capire se posso mantenerlo coerente con il codice esistente in cui viene usata la regex. – omshanti