2011-12-23 15 views
5

Dire che ho un oggetto sregex come questo:Come ripetere i gruppi denominati in xpressive?

boost::xpressive::sregex::compile("(?P<firstword>\\w+) (?<secondword>\\w+)!"); 

non sono stato in grado di trovare alcun riferimento nella documentazione Xpressive per quanto riguarda questo, nonostante Xpressive supporto gruppi denominati bene.

So che è possibile iterare attraverso i gruppi va bene, ma come potrei accedere al nomegruppo (se il gruppo ha un nome)?

Quindi, come posso scorrere tra i gruppi denominati?

+2

Duplicate: http://stackoverflow.com/questions/2718607/cboostregex-iterate-over -the-submatches –

+2

Come è un duplicato? La risposta collegata ** non ** risponde, in quanto cita solo il codice direttamente dall'intestazione (a parte il fatto che l'uso di quel codice sarebbe un mero trucco), non include nemmeno un esempio. Perché sto anche cercando di spiegare? Qualcuno mi dirà "è totalmente un duplicato ecc. Ecc. Ecc." Lo risucchio ". SO sta davvero perdendo l'utilità. E questo è ancora ben fatto, come un gentiluomo. – hiobs

+1

I duplicati non riguardano le risposte; si tratta di domande. Il tuo piccolo rant non cambia quello –

risposta

4

Supponendo che abbiamo l'intera espressione regolare che si sta lavorando, iIt sembra il mio punto di vista che si sta tentando di creare un'espressione regolare che corrispondono sia del la cattura di nome, quindi è inutile cercare per scorrere su acquisizione con nome.

Devi semplicemente provare qualcosa del genere.

std::string str("foo bar"); 
sregex rx = sregex::compile("(?P<firstword>\\w+) (?<secondword>\\w+)!"); 
smatch what; 
if(regex_search(str, what, rx)) 
{ 
    std::cout << "char = " << what["firstword"] << what["secondword"] std::endl; 
} 

Se l'espressione regolare è parte di un disegno più complesso perché non utilizzare il nome di acquisizione statica: http://www.boost.org/doc/libs/1_41_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.named_captures.static_named_captures

+0

Sfortunatamente sembra che l'uso di 'operator []' sia attualmente l'unico modo per accedere ai gruppi nominati. Vorrei che xpressive rendesse il groupname accessibile tramite le funzioni dei membri ... – hiobs

Problemi correlati