Pregunta

Estoy necesitando para implementar las expresiones regulares en un programa en C ++ que estoy escribiendo, y quería utilizar RE2 pero no pude compilarlo en las ventanas. ¿Alguien sabe de otra biblioteca de expresiones regulares o como se llame que compila fácilmente en las ventanas y no es un "retroceso" motor de expresiones regulares, sino una teoría de autómatas basa uno (lo que significa) como RE2 es?

O simplemente encontrar la manera de compilar RE2 en las ventanas sería perfecto.

¿Fue útil?

Solución

Las expresiones regulares son parte de la norma TR1, por lo que es probable que usted ya tiene un encabezado que <tr1/regex> contiene una clase std::tr1::regex y las funciones relacionadas.

Otros consejos

Para consultar

http://www.complang.org/ragel/

Es un DSL externo por lo que técnicamente no C ++. Sin embargo, ya que genera pura C ++ / C de las expresiones regulares que debería ser mucho más rápido que todo lo que se construye en tiempo de ejecución ./

Por ejemplo.

action dgt      { printf("DGT: %c\n", fc); }
action dec      { printf("DEC: .\n"); }
action exp      { printf("EXP: %c\n", fc); }
action exp_sign { printf("SGN: %c\n", fc); }
action number   { /*NUMBER*/ }

number = (
    [0-9]+ $dgt ( '.' @dec [0-9]+ $dgt )?
    ( [eE] ( [+\-] $exp_sign )? [0-9]+ $exp )?
) %number;

main := ( number '\n' )*;

get compilado hasta

st0:
    if ( ++p == pe )
        goto out0;
    if ( 48 <= (*p) && (*p) <= 57 )
        goto tr0;
    goto st_err;
tr0:
    { printf("DGT: %c\n", (*p)); }
st1:
    if ( ++p == pe )
        goto out1;
    switch ( (*p) ) {
        case 10: goto tr5;
        case 46: goto tr7;
        case 69: goto st4;
        case 101: goto st4;
    }
    if ( 48 <= (*p) && (*p) <= 57 )
        goto tr0;
    goto st_err;

Tengo un puerto de RE2 para Windows en http://code.google.com/p/ re2win / . Se construye con una gran cantidad de advertencias, no hay errores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top