les expressions régulières en java
DESCRIPTION
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 JavaTRANSCRIPT
1
Eric TOGUEM, CIO AByster (www.abyster.com)
LES EXPRESSIONS RÉGULIÈRES EN JAVA
2QU’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
3A 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
COMPOSANTES D’UNE EXPRESSION
RÉGULIÈRES: LES 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 : AB\tCD représente la chaine de caractère AB suivi d’une tabulation suivi de CD
5
COMPOSANTES D’UNE EXPRESSION RÉGULIÈRES: LES
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
COMPOSANTES D’UNE EXPRESSION RÉGULIÈRES: LES
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: [ \t\n\x0B\f\r]
\S Un caractère non blanc : [^\s]
7
COMPOSANTES D’UNE EXPRESSION RÉGULIÈRES: CLASSES 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[ \t\n\x0B\f\r]
8
COMPOSANTES D’UNE EXPRESSION
RÉGULIÈRES: LES 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
COMPOSANTES D’UNE EXPRESSION RÉGULIÈRES:
OPÉRATEURS LOGIQUES
XY X suivi de Y
X|Y X ou Y
10 EXEMPLES
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,
11UTILISATION AVEC JAVA:
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 \
12UTILISATION AVEC JAVA:
LES MÉTHODES
La classe String
public boolean matches(String regex)
public String replaceAll(String regex, String replacement)
public String[] split(String regex)
13EXPRESSIONS
REGULIÈRES EN JAVA
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
EXPRESSIONS REGULIÈRES EN JAVA: MÉTHODES
DE PATTERN
static Pattern compile( String expreg)
Matcher matcher (CharSequence entree)
String[] split ( charSequence entree)
15
EXPRESSIONS REGULIÈRES EN JAVA: QUELQUES MÉTHODES
DE MATCHER
int start()
int end()
String group()
int groupCount()
boolean find()
boolean matches()