Bonjour,
Je cherche à valider via une regex, une chaine contenant le symbole $ (dollar) et des lettres majuscules uniquement.
J'utilise Eclipse et JAVASE-1.6. J'ai une classe avec une méthode qui se contente de retourner le résultat de Pattern.matches, et une classe de test où je peux saisir ma regex et ma chaine afin de vérifier.
Cependant, impossible d'arriver à mes fins:
Lorsque j'utilise la méthode avec la regex suivante:
l'IDE me gratifie de cette erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public Boolean isAlphanumeric(String chaine) { return Pattern.matches("^([A-Z]|\$)+$", chaine); }
Mais lorsque je rentre manuellement la même expression régulière dans ma classe de test, avec la chaine "AZE$AAE", l'expression concorde, le tout sans erreurs (Cf résultat ci dessous).Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\)
J'ai bien essayé de modifier la regex de la méthode "isAlphanumeric" en dédoublant l'antislash avant le $, voir en le quadruplant.
L'erreur disparaît de l'IDE, mais lorsque je teste l'expression à la main la regex ne match pas.
Ce que je ne comprends pas c'est que dès lors que j'essaie de faire la même chose mais en remplaçant le caractère '$' par '?' (point d'interrogation), un simple dédoublage de l'antislash permet à la fois de ne pas avoir d'erreur dans l'IDE et de faire matcher l'expression.
Donc pour le dollar, est-ce un bug de l'IDE, mon expression qui est fausse, ... ?
P.S: Voici ma classe de test qui demande en boucle la saisie d'une regex et d'une chaine à vérifier:
Et le résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.regex.Pattern; public class TestRegex { public static void main(String[] args) throws IOException{ InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String regex; String line; while (true) { System.out.println("\nEntrez votre regex: "); regex = br.readLine(); System.out.println("\nEntrez la chaine à introspecter: "); line = br.readLine(); boolean found = Pattern.matches(regex, line); if (found) System.out.println("Concordance"); else System.out.println("Regex non-vérifiée"); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Entrez votre regex: ^([A-Z]|\$)+$ Entrez la chaine à introspecter: AZEA$AEZ Concordance
Partager