2011-09-28 12 views
13

¿Podría alguien explicar las diferencias entre los dos? ¿Cuál sería mejor aprender en este momento? ¿Cómo se transferiría el conocimiento de uno a otro y viceversa?Boost.Regex vs C++ 11 Regex

+5

Aprender de forma estándar nunca es malo. –

+3

Tenga cuidado con la Biblioteca estándar C++ 11 Regex, porque todavía no está completamente implementado por GCC: http://stackoverflow.com/questions/4716680/c0x-regex-in-gcc –

Respuesta

10

La biblioteca de regex boost lo convirtió en C++ 0x, así que supongo que se eliminará lentamente del impulso. Sin embargo, usar boost es bueno porque todavía puedes usarlo con compiladores sin compatibilidad con C++ 0x. Entonces realmente depende de ti.

+3

Sí, pero ¿puede uno migrar un Boost.Regex-based program to C++ 11 Regex con un simple 's/boost ::/std ::/g'? –

+0

@Rob: imagino que eso depende de si está usando la compatibilidad con ICU de Boost.Regex. – ildjarn

7

Una diferencia importante es que C++ 11 no proporciona la sintaxis de Perl para las expresiones regulares. Por lo tanto, si tiende a usar la sintaxis de Perl, debe usar la biblioteca Boost :: Regex.

+0

Sí, existe una sintaxis de Perl para regex: existe ECMAScript regex y ECMAScript regex es lo mismo que Perl regex http://ecma-international.org/ecma-262/5.1/#sec-15.10 – BenjaminB

+5

@ Ubiquité no es correcto. El enlace que proporcionó dice "modelado después". La [propuesta de C++ TR1 para ] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1429.htm#syntax_discussion) utiliza el fraseo muy similar "basado en". Las expresiones regulares de ECMAScript no son lo mismo que las expresiones regulares de Perl: Perl proporciona más funciones y una sintaxis diferente. –

+1

@PatrickNiedzielski: Tiene razón, desafortunadamente Boost.Regex definió 'perl' como 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

Al menos en Visual Studio 2013 este y los nombres relacionados (cmatch, regex_match) son los mismos en ambos espacios de nombres. También tienen la misma interfaz (¿o similar?).

Así que puede simplemente cambiar el espacio de nombres y se compilará el mismo código con otra expresión regular sin previo aviso y sin errores. Y debería funcionar igual por supuesto.

P.S. Preferiría std :: regex ya que es parte de C++ 11 y boost :: regex es una biblioteca de terceros. Estoy seguro de que unos años más tarde, boost eliminará el soporte para boost :: regex.