Frage

Ich brauche den regulären Ausdrücken in C ++ zu implementieren Programm ich schreibe, und ich wollte RE2 verwenden, aber ich konnte kompilieren es nicht unter Windows. Kennt jemand eine andere Bibliothek für reguläre Ausdrücke oder was auch immer es, dass compiles leicht an Fenstern genannt und ist kein „Backtracking“ Regex-Engine, sondern eine Automaten-Theorie basiert ein (was immer das bedeutet) wie RE2 ist?

Oder einfach, herauszufinden, wie RE2 auf Windows zu kompilieren wäre perfekt.

War es hilfreich?

Lösung

Reguläre Ausdrücke sind Teil des TR1-Standard, so dass die Chancen sind Sie bereits ein <tr1/regex> Header, dass enthält einer std::tr1::regex Klasse und verwandte Funktionen.

Andere Tipps

Haben Sie einen Blick auf

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

Es ist ein externes DSL so technisch nicht C ++. Jedoch, wie es erzeugt rein C ++ / C von dem regulären Ausdrücken soll es viel schneller sein als alles, was zur Laufzeit gebaut ./

Zum Beispiel.

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 ist auf

zusammengestellt nach unten
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;

habe ich einen Port von RE2 für Windows unter http://code.google.com/p/ re2win / . Es baut mit vielen Warnungen, keine Fehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top