2011-09-28 10 views
13

Qualcuno potrebbe spiegare le differenze tra i due? Quale sarebbe meglio imparare in questo momento? In che modo la conoscenza si trasferisce da una all'altra e viceversa?Boost.Regex vs C++ 11 Regex

+5

L'apprendimento del modo standard non è mai una cosa negativa. –

+3

Fai attenzione con la libreria standard C++ 11 Regex, perché non è ancora completamente implementato da GCC: http://stackoverflow.com/questions/4716680/c0x-regex-in-gcc –

risposta

10

La libreria di regex di boost è stata convertita in C++ 0x, quindi suppongo che verrà lentamente rimossa dal boost. Tuttavia, usare boost è bello perché puoi ancora usarlo con i compilatori senza il supporto C++ 0x. Quindi dipende solo da te.

+3

Sì, ma si può migrare a Boost.Regex programma in C++ 11 Regex con un semplice 's/boost ::/std ::/g'? –

+0

@Rob: Immagino che dipenda dal fatto che tu stia utilizzando il supporto per ICU di Boost.Regex. – ildjarn

7

Una differenza importante è che C++ 11 non fornisce la sintassi Perl per le espressioni regolari. Quindi, se tendi ad usare la sintassi Perl devi usare la libreria Boost :: Regex.

+0

Sì, esiste la sintassi Perl per la regex: Esiste l'espressione regolare ECMAScript e l'espressione regolare ECMAScript è la stessa della regex Perl http://ecma-international.org/ecma-262/5.1/#sec-15.10 – BenjaminB

+5

@ Ubiquité non sei corretto. Il link che hai fornito dice "modellato". La [proposta C++ TR1 per ] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1429.htm#syntax_discussion) usa il fraseggio molto simile "basato su". Le espressioni regolari di ECMAScript non sono la stessa cosa delle espressioni regolari Perl: Perl offre più funzionalità e alcune sintassi diverse. –

+1

@PatrickNiedzielski: Sei corretto, purtroppo Boost.Regex ha definito 'perl' come equivalente a' ECMAScript' http://www.boost.org/doc/libs/1_53_0/libs/regex/doc/html/boost_regex/ref/ syntax_option_type/syntax_option_type_perl.html. – kennytm

0

Almeno in Visual Studio 2013 questo e i relativi nomi (cmatch, regex_match) sono gli stessi in entrambi gli spazi dei nomi. Hanno anche la stessa (o simile?) Interfaccia.

Quindi è possibile modificare lo spazio dei nomi e lo stesso codice verrà compilato con un altro regex senza avvisi ed errori. E dovrebbe funzionare allo stesso modo, naturalmente.

P.S. Preferirei std :: regex dato che fa parte di C++ 11 e boost :: regex è una libreria di terze parti. Sono sicuro che pochi anni dopo, boost rimuoverà il supporto per boost :: regex.