15 votes

Tester les regex avec Java

Je suis en train d'apprendre le regex et j'utilise l'extrait de code suivant à des fins de test :

String regex = "";
String test = "";
Pattern.compile(regex).matcher(test).find();

mais quand j'en essaie quelques-uns comme ça :

System.out.println(Pattern.compile("h{2,4}").matcher("hhhhh").find()); 

il renvoie vrai et non faux comme prévu.

ou

System.out.println(Pattern.compile("h{2}").matcher("hhh").find());

il renvoie vrai et non faux comme prévu.

Quel est le problème ? Peut-être que ce n'est pas la bonne déclaration à utiliser pour tester correctement la regex ?

Merci.

20voto

Tim Pietzcker Points 146308

La chaîne hhh contient deux h par conséquent, l'expression rationnelle correspond au fait que l'élément find() permet de faire correspondre des sous-chaînes.

Si vous ancrez la regex pour la forcer à correspondre à la chaîne entière, la regex échouera :

^h{2}$

Une autre possibilité serait d'utiliser le matches() méthode :

"hhh".matches("h{2}")

échouera.

0voto

adarshr Points 25912

Mais cela ne reviendra pas true .

System.out.println(Pattern.compile("^h{2,4}$").matcher("hhhhh").find()); 

^ est le début de la ligne

$ est la fin de la ligne

0voto

Adam Gent Points 15055

Vous voulez utiliser .matches() et non .find(). Vous devriez également l'ancrer comme @Tim l'a dit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X