Domanda

Sto dovendo implementare le espressioni regolari in un programma C ++ che sto scrivendo, e ho voluto usare re2 ma non riuscivo a compilarlo su Windows. Qualcuno sa di un'altra libreria di espressione regolare o come si chiama che compila facilmente su Windows e non è un "backtracking" motore regex, ma un automi-teoria basata una (qualunque cosa significhi) come RE2 è?

O semplicemente per capire come compilare re2 sulle finestre sarebbe perfetto.

È stato utile?

Soluzione

Le espressioni regolari sono parte dello standard TR1, quindi è probabile che si dispone già di un <tr1/regex> intestazione che contiene una classe std::tr1::regex e funzioni correlate.

Altri suggerimenti

Date un'occhiata a

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

E 'un DSL esterno, quindi non tecnicamente C ++. Tuttavia in quanto genera puro C ++ / C dalle espressioni regolari che dovrebbe essere molto più veloce di tutto ciò che è costruito a runtime ./

Ad esempio.

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 stato compilato fino a

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;

Ho un porto di RE2 per Windows a http://code.google.com/p/ re2win / . Si costruisce con un sacco di avvertimenti, nessun errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top