2013-06-02 28 views
6

Sto convertendo le mie espressioni regolari basate su boost in regex C++ 11. Ho un gruppo di acquisizione denominato url:C++ 11 Regex Cattura gruppi per nome

\s*?=\s*?(("(?<url>.*?)")|('?<url>.*?)')) 

con boost, se aveste un smatch si potrebbe chiamare match.str("url") per ottenere il gruppo di cattura per nome. Con std::smatch, vedo solo sub-corrispondenze indicizzate.

Come posso ottenere l'accesso all'url capture utilizzando la classe std :: smatch?

+0

Hai provato '(? P . *?)' Invece di '(? . *?)'? – HamZa

+0

@HamZa Non sono sicuro che l'espressione regolare C++ 11 supporti i gruppi di acquisizione denominati. Ho appena letto l'intero capitolo dedicato all'argomento nel nuovo "Linguaggio di programmazione C++" di Stroustrup e non ne parla nemmeno. E molti dei riferimenti online non sembrano indicare diversamente. –

+0

Sembra che non supporti i gruppi denominati in base a questa [risposta] (http://stackoverflow.com/a/6398650). – HamZa

risposta

5

Non è possibile assegnare un nome a un gruppo di acquisizione con lo standard C++ 11. La regex di C++ 11 è conforme alla sintassi ECMAScript. Ecco un link che spiega tutto http://www.cplusplus.com/reference/regex/ECMAScript/. Anche se questo forse deludente se ci pensate, una vera espressione regolare non supporterà che sia extra.

+0

Puoi pubblicare un esempio che estrae un gruppo nidificato? Forse dov'è la partita su entrambi i lati di un tubo? –

+0

Significa che è già stata effettuata la partita – aaronman

+0

Fondamentalmente voglio vedere come estrarre efficientemente il mio url in base al mio esempio pubblicato, aggiornato per non fare affidamento sui gruppi di cattura nominati. –