Question

Je suis besoin de mettre en œuvre des expressions régulières dans un programme C ++ je suis en train d'écrire, et je voulais utiliser RE2 mais je ne pouvais pas le compiler sur les fenêtres. Quelqu'un sait-il d'une autre bibliothèque d'expressions régulières ou quelque chose comme ça qui compile facilement sur les fenêtres et n'est pas un « retour en arrière » moteur regex, mais une théorie des automates basé un (quoi que cela signifie) comme RE2 est?

Ou tout simplement déterminer comment compiler RE2 sur les fenêtres serait parfait.

Était-ce utile?

La solution

Les expressions régulières font partie de la norme TR1, si les chances sont que vous avez déjà un en-tête <tr1/regex> que contient une classe std::tr1::regex et fonctions connexes.

Autres conseils

Jetez un oeil à

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

Il est un DSL externe donc pas techniquement C ++. Cependant, comme il génère pur C ++ / C des expressions régulières, il devrait être beaucoup plus rapide que tout ce qui est construit à l'exécution ./

Par exemple.

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 compilé en

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;

J'ai un port de RE2 pour Windows http://code.google.com/p/ re2win / . Il construit avec beaucoup d'avertissements, aucune erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top