FiniteAutomaton regular expression
Bonjour à tous,
Je ne sais absolument pas si je poste au bon endroit, donc désolé par avance si je me trompe de forum.
J'utilise la librairie de dk.brics pour la construction d'automates
http://www.brics.dk/automaton/doc/in...on/RegExp.html
Je précise tout de suite que je n'ai pas la possibilité de changer de librairie...
Je voudrais créer un automate qui interdise l'enchainement de la valeur -1, avec d'autres valeurs.
Par exemple :
-1, 2 doit être refusé
2, -1 est accepté
Bref cela devrait être simple, en tout cas, c'est facile à faire avec juste des nombres positifs, mais le fait d'avoir un -1, me pose des problèmes.
Voilà ce que j'ai essayé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
List<String> forbiddenRegExps = new ArrayList<String>();
String allButMinusOne = "(0|1|2|3|<-2>|<-3>)";
for(int i=0 ; i<2 ; i++){
forbiddenRegExps.add(allButMinusOne + "*" + "<-1>+" + allButMinusOne +"+");
System.out.println(allButMinusOne + "*" + "<-1>+" + allButMinusOne +"+");
}
// --- Building the complete automaton
FiniteAutomaton auto = new FiniteAutomaton();
for (String reg : forbiddenRegExps) {
FiniteAutomaton a = new FiniteAutomaton(reg);
auto = auto.union(a);
auto.minimize();
}
auto = auto.complement();
auto.minimize();
boolean b = auto.run(new int[]{0, 1, 2, 3, -1, -1});
System.err.println("result 1 : " + b + " (should be true)");
boolean b2 = auto.run(new int[]{0, 1, 2, 3, -1, -1, 3});
System.err.println("result 2 : " + b2 + " (should be false)"); |
Est ce que quelqu'un a une idée du problème?
Un grand merci d'avance !!