Les expressions régulières ou le pattrn matching sont de puissants outils pour le parsing. Le but de cette présentation est de montrer comment y arriver en Java
2. 2
Q U ’ EST CE QU ’ UNE
EXPRESSION RÉGULIÈRE ?
Chaine de caractères qui décrit un ensemble de
chaines de caractères.
Exemple: l’expression régulière [0-9][a-z] décrit
l’ensemble des chaines de caractères composées
d’un chiffre et d’une lettre
3. 3
A QUOI SERVENT LES
EXPRESSIONS RÉGULIÈRES ?
De nombreuses utilités en informatique, elles servent
principalement pour réaliser :
des filtres : ne conserver que certaines lignes d’un
fichier texte, de la forme nom=valeur par exemple
des contrôles : vérifier qu’une donnée entrée par un
utilisateur a bien le format d’une adresse IP par
exemple.
des substitutions : remplacer un motif par une
chaine de caractères précise.
des découpages : récupérer une partie d’une chaine
de caractères par exemple découper une ligne par
rapport aux « ; » dans le cas d’un fichier .csv.
4. C OMPOSANTES D ’ UNE EXPRESSION
4
RÉGULIÈRES : L ES CARACTÈRES
X Le caractère X
Le caractère
t Le caractère tabulation
n Le caractère nouvelle ligne
r Le caractère retour chariot
f Le caractère saut de page
Exemple : ABtCD représente la chaine de caractère
AB suivi d’une tabulation suivi de CD
5. C OMPOSANTES D ’ UNE EXPRESSION
5 RÉGULIÈRES : L ES CLASSES DE CARACTÈRES
[abc] Les caractères a, b ou c
[^abc] Les caractères qui ne sont pas a, b ou c
[a-z] Un caractère de a à z
[a-zA-Z] Un caractère de a à z minuscule ou
majuscule
[0-9] Un caractère numérique
Exemple : [0-9][a-z] représente une chaine de
caractères constituée d’un chiffre puis d’une lettre.
6. C OMPOSANTES D ’ UNE EXPRESSION
6 RÉGULIÈRES : L ES CLASSES DE CARACTÈRES
PRÉDÉFINIES
. Un caractère quelconque
d Un caractère numérique : [0-9]
D Un caractère non numérique : [^0-9]
s Un caractère blanc: [ tnx0Bfr]
S Un caractère non blanc : [^s]
7. C OMPOSANTES D ’ UNE EXPRESSION
7 RÉGULIÈRES : C LASSES DE CARACTÈRES
POSIX
p{Lower} Une misnuscule : [a-z]
p{Upper} Une majuscule :[A-Z]
p{Alpha} Un caractère alphabétique : [p{Lower}p{Upper}]
p{Digit} Un chiffre : [0-9]
p{Alnum} Un caractère alphanumérique : [p{Alpha}p{Digit}]
p{Punct} Ponctionation : !"#$%&'()*+,-./:;<=>?@[]^_`{|}~
p{Blank} Espace ou tabulation : [ t]
p{XDigit} Un caractère hexadécimal: [0-9a-fA-F]
p{Space} Un caractère blanc[ tnx0Bfr]
8. C OMPOSANTES D ’ UNE EXPRESSION
8 RÉGULIÈRES : L ES CARACTÈRES DE
RÉPÉTITION
X? X une fois ou zéro fois
X* X zéro ou plusieurs fois
X+ X une fois au moins (XX*)
X{n} X n fois
X{n,} X, au moins n fois
X{n,m} X entre n et m fois
9. C OMPOSANTES D ’ UNE EXPRESSION
9
RÉGULIÈRES : O PÉRATEURS LOGIQUES
XY X suivi de Y
X|Y X ou Y
10. 10 E XEMPLES
Expression régulière correspondant à une
adresse IP
Expression régulière correspondant à une
adresse email,
Expression régulière correspondant à un numéro
de téléphone,
Expression régulière correspondant à une URL,
Expression régulière correspondant à un nombre
réel,
11. 11
U TILISATION AVEC J AVA :
REMARQUE
Le caractère a un sens pour java, il faut donc le
doubler dans l’écriture des expressions régulières
pour qu’il ne soit pas interprété par java. Par
exemple, on écrira . à la place de
12. 12
U TILISATION AVEC J AVA : L ES
MÉTHODES
La classe String
public boolean matches(String regex)
public String replaceAll(String regex,
String replacement)
public String[] split(String regex)
13. 13
E XPRESSIONS REGULIÈRES EN
J AVA
Trois classes interviennent :
Pattern : permet d'obtenir une version compilée d'une expression
régulière.
Matcher : permet d'analyser une chaîne en entrée à partir
d'un Pattern.
PatternSyntaxException : exception levée lorsque la syntaxe d'une
expression régulière n'est pas correcte.
try{
Pattern p = Pattern .compile("a*b|c");
String entree = "aabbbcab";
Matcher m = p.matcher(entree);
while (m.find())
System.out.println(entree.substring(m.start(), m.end()));
}catch(PatternSyntaxException pse){ }
14. E XPRESSIONS REGULIÈRES EN J AVA :
14
M ÉTHODES DE PATTERN
static Pattern compile( String expreg)
Matcher matcher (CharSequence entree)
String[] split ( charSequence entree)
15. E XPRESSIONS REGULIÈRES EN J AVA :
15
Q UELQUES MÉTHODES DE M ATCHER
int start()
int end()
String group()
int groupCount()
boolean find()
boolean matches()