J'ai besoin d'implémenter des expressions régulières dans un programme C++ que j'écris, et je voulais utiliser re2 mais je ne pouvais pas le compiler sous Windows. Est-ce que quelqu'un connaît une autre bibliothèque d'expressions régulières ou quelque chose de ce genre qui se compile facilement sur Windows et n'est pas un moteur regex "backtracking", mais une base basée sur la théorie des automates (quoi que ce soit) comme re2? Ou simplement trouver comment compiler re2 sur Windows serait parfait.Une alternative basée sur Automata à re2
2
A
Répondre
1
Les expressions régulières font partie de la norme TR1, donc vous avez probablement déjà un <tr1/regex>
en-tête contains une classe std::tr1::regex
et des fonctions connexes.
1
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 à partir des expressions régulières, il devrait être beaucoup plus rapide que tout ce qui est construit au moment de 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;
0
J'ai un port de RE2 pour Windows à http://code.google.com/p/re2win/. Il construit avec beaucoup d'avertissements, pas d'erreurs.
Questions connexes
- 1. Une alternative à DataGridView
- 2. Quelqu'un a-t-il créé une alternative basée sur Tomcat pour GAE?
- 3. Alternative à PDF sur iPad
- 4. hbm2ddl sur une colonne basée sur GenericEnumUserType
- 5. Une requête HTTP basée sur cURL peut-elle imiter complètement une requête basée sur un navigateur?
- 6. Java: Alternative à iterator.hasNext() en cas d'utilisation pour chaque-à boucle sur une collection
- 7. Bonne alternative à l'accès SQL sur iPhone
- 8. Vue initiale sur une application basée sur une vue partagée
- 9. Limiter l'accès à une certaine action basée sur l'ID
- 10. Évaluation basée sur la colonne correspondant à une chaîne
- 11. Vim: source basée sur une chaîne
- 12. Alternative à zc.buildout qui s'exécute sur Python3
- 13. Appliquer une classe basée sur la page
- 14. Convertir une valeur basée sur la gamme
- 15. Ecrire une fonction basée sur TestUnit donné
- 16. Autorisation basée sur une colonne - sécurisé?
- 17. Éclate une chaîne basée sur regexp
- 18. supprimer une ligne basée sur la logique
- 19. Réplication basée sur une requête MySQL
- 20. nombre de colonnes basée sur une gamme
- 21. Afficher une entrée XML basée sur l'ID
- 22. Construire une requête LINQ basée sur bools
- 23. perl une alternative à cette bash "chaîne"?
- 24. validation basée sur l'annotation basée sur le haricot
- 25. créer une boucle basée sur 30 utilisateurs?
- 26. Modifier une chaîne basée sur un modèle
- 27. Fusion dynamique basée sur une chaîne
- 28. C# - Capture d'écran basée sur une minuterie
- 29. Node.JS Vous cherchez une alternative à socket.IO
- 30. Alternative à une série de méthodes surchargées
De quels problèmes de compilation s'agissait-il? –
Les choses ne sont pas définies, principalement. Il y avait un milliard d'erreurs. Je peux les coller tous dans le codepad si cela peut aider. – Langley
Je suis l'auteur du port sur Windows http://code.google.com/p/re2win/ faites juste attention à la conversion automatique en nombre entier (faites vous-même la conversion). – unixman83