Intentaré complementar las respuestas de otras personas profundizando en el tema de las expresiones regulares en tiempo de compilación (CTR) frente a las expresiones regulares en tiempo de ejecución (RTR) de una manera más teórica (este tema está implícito en OP pregunta indirectamente en mi humilde opinión). La expresión regular en tiempo de ejecución es más conocida y popular (la mayoría de las implementaciones de bibliotecas principales de idiomas), supongo que por razones históricas. Están bien cuando la expresión regular se determina en tiempo de ejecución, a diferencia del CTR. Ambos funcionan en base a la máquina de estados finitos.
RTR son "compilados" e interpretados por algún tipo de máquina de estado finito universal (universal significa su tipo de intérprete cuyo esquema se da en tiempo de ejecución, "compilado" en alguna estructura de datos interna - cuando pasa cadena de expresiones regulares, luego interpretado en tiempo de ejecución).
Pero CTR es "compilado" en tiempo de compilación y son particular, específico para expresiones regulares, por lo que no puede usarlos, cuando la expresión regular se da en tiempo de ejecución (aplicaciones como editores de texto, archivo/buscadores de internet) Pero a priori son más eficientes (teóricamente) que la máquina de estado finito en tiempo de compilación personalizada en eficiencia, que el intérprete con esquema preestablecido de tabla de esta máquina (algunos casos similares son acceso de campo de reflexión vs. tiempo de compilación acceso, o función especializada optimizada para algún parámetro fijo como se señala there). Otra ventaja es la comprobación de sintaxis en tiempo de compilación. El CTR se puede implementar a través de metaprogramación y/o generación de código.
En cuanto a las implementaciones específicas, hay muchas RTR, pero no tantas CTR. Para C++ se mencionan las implementaciones de Boost y STL C++ 0x11. Es posible que los necesite para optimizar el rendimiento regex/tamaño del uso generado de código/memoria, principalmente relevante para sistemas integrados o aplicaciones específicas de alto rendimiento. SO question about CTR Encontrar implementaciones de CTR es más difícil, un ejemplo si se encuentra es Re2C Code generator project, Java CTR implementation y C# implementación con compilación en tiempo de ejecución (en código IL, no estructura de datos interna) de Regex [hay ASÍ QUE pregunta]
PS Lo sentimos, no se pudieron publicar algunos enlaces relevantes debido a la reputación
Esto no es del todo cierto. Xpressive también admite expresiones regulares de tiempo de ejecución, consulte aquí: http://www.boost.org/doc/libs/1_46_1/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.creating_a_regex_object.dynamic_regexes – Pablo
@Pablo ¡Gracias! Nunca me di cuenta que hizo esto. ¿Sabes qué back-end usa? ¿Requiere una libración precompilada? – KitsuneYMG
Es un encabezado solo lib. Consulte las notas de instalación: http://www.boost.org/doc/libs/1_46_1/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.installing_xpressive No he tenido problemas con los tiempos de compilación. La razón por la que cambié a Boost.Regex fue el soporte de ICU. – Pablo