2009-09-14 13 views
15

¿Lo tiene? En caso afirmativo, ¿dónde puedo obtener la documentación? Si no es así, ¿cuál sería la mejor alternativa?¿Tiene C o C++ una biblioteca de expresiones regulares estándar?

+0

Casi duplicados: http://stackoverflow.com/questions/181624, http://stackoverflow.com/questions/923500 y http://stackoverflow.com/questions/815429. –

+1

http://stackoverflow.com/questions/329517/there-is-a-function-to-use-pattern-matching-using-regular-expressions-in-c – dmckee

+1

BTW: podría haber tenido una gran cantidad de información más rápido y más fácil mediante la búsqueda: http://stackoverflow.com/search?q=c+c%2B%2B+regex+standard – dmckee

Respuesta

31

C++ 11 ahora finalmente tiene un standard regex library - std :: regex.

Si no tiene acceso a una implementación de C++ 11, una buena alternativa podría ser boost regex. No es completamente equivalente a std :: regex (por ejemplo, the "empty()" method is not in the std::regex) pero es una implementación de expresiones regulares muy madura para C++.

+0

Esta respuesta está fechada, a partir de 2012 la respuesta es ahora Sí, C++ tiene una biblioteca de expresiones regulares estándar, ordenado por C++ 11, bajo el encabezado "regex" –

+0

@Clairvoire - He decidido editar/actualizar mi respuesta a los cambios desde finales de 2009, gracias por el aviso de esta respuesta desactualizada. –

+0

La diferencia también es que el estándar de C++ no admite subgrupos con nombre, es decir, nombrar partes de expresiones regulares para que luego pueda obtenerlas por su nombre. – user3111311

5

Compruebe la biblioteca boost regex. Debería convertirse en parte del estándar con C++ 0x.

3

Si por estándar te refieres a paquete con compilador, entonces no. Pero la mayoría de los otros lenguajes que combinan la extensión de expresiones regulares usan implementaciones bastante estándar c. P.ej. PCRE - Perl Compatible Regular Expression y las bibliotecas C tienen soporte de expresiones regulares POSIX (ver man page).

6

El paquete de características 1 de Microsoft Visual C++ 2008 (ahora incluido en el paquete de servicio 1 de Visual Studio 2008) contiene una implementación de los tipos de registro 'oficial' TR1. Knock out :-)

1

Qt, de Trolltech, también tiene una aplicación de expresiones regulares que me parece muy fácil de usar. Sin embargo, si no está planeando utilizar Qt para nada más, usaría Boost.Regex ya que probablemente también sería bueno usar Boost para otros fines.

1

El lenguaje de programación ISO/IEC 14882: 2011 estándar C++ describe una clase de expresiones regulares como parte de la biblioteca de C++, que está muy influenciada por la biblioteca madura de Boost.

Curiosamente, a partir de enero de 2013, el cumplimiento de los compiladores con esta norma sigue siendo irregular, p. el popular compilador de C++ del conjunto de compiladores de GNU no admite/cumple esta parte del estándar.

Por esa razón, es mejor usar Boost en este momento hasta que el soporte del compilador alcance el cumplimiento.

Cuestiones relacionadas