Vous êtes sur la page 1sur 28

Les expressions

rgulires

Daniel Tschirhart : Programmation Java V1.34

Daniel Tschirhart : Programmation Java V1.34

Les expressions rgulires


Le langage des expressions rgulires est
spcialement conu et optimis pour la
manipulation de texte.
 Ce langage comprend deux principaux types
de caractres :


 les

caractres de texte littral


 les mta caractres.


C'est le jeu de mta caractres qui confre


aux expressions rgulires leur puissance de
traitement.
2

Daniel Tschirhart : Programmation Java V1.34

Quelques expressions
rgulires simples (1)


Soit rechercher dans un document le


mot elvis. Spcifier lexpression
suivante :
1. elvis

recherchera tous les mots contenant


elvis soit : elvis, elvise, pelvis,

Daniel Tschirhart : Programmation Java V1.34

Quelques expressions
rgulires simples (2)


Lexpression prcdente peut tre


amliore de faon suivante :
2. \belvis\b

\b est un mta caractre qui signifie


chercher le dbut ou la fin dun mot.
En spcifiant cette expression on ne
cherchera que le mot elvis.
4

Daniel Tschirhart : Programmation Java V1.34

Quelques expressions
rgulires simples (3)
Supposons rechercher sur la mme ligne le mot
elvis suivi de tous les mots prcdents le mot
concert.

Le . est un mta caractre signifiant nimporte quel


caractre except le caractre newline.

Le caractre * rpte le nombre de fois ncessaire le
mta caractre ou le caractre prcdent.

Ainsi .* signifie les tous caractres except newline.
Lexpression suivante effectue la recherche dsire:
3. \belvis\b.*\bconcert\b


Daniel Tschirhart : Programmation Java V1.34

Dterminer la validit du format


dun numro de tlphone


Soit rechercher sur une page Web les numros


de tlphone ayant le format :
xxx-xxxxxxxxxx (exemple 033-0546314755).
Lexpression suivante permet de spcifier ce
format:
4. \b\d\d\d-\d\d\d\d\d\d\d\d\d\d
\d signifie tout digit, - na pas de signification ici en tant
que mta caractre et signifie ce quil reprsente.


Il est possible dviter la rptition des caractres \d par


lexpression suivante :

5. \b\d{3}-\d{10}

Daniel Tschirhart : Programmation Java V1.34

Quelques mta caractres de


base
Nous connaissons dj \b, \d, ., *.
Le caractre \s reprsente nimporte quel
sparateur (espace, tabulation, nouvelle ligne, ),
de mme \w reprsente nimporte que caractre
alphanumrique.
Exemple :

\ba\w*\b
recherche tous les mots commenant par le lettre a
\d+
recherche tous les mots ne contenant que des chiffres
(+ est identique * sauf quil ncessite au moins une
rptition).
\b\w{6}\b
trouve un mot de 6 lettres.
7

Daniel Tschirhart : Programmation Java V1.34

Syntaxe des motifs


dexpression rgulire


La syntaxe des motifs est trs riche.









1. Chanes littrales
2. Mta caractres
3. Classes de caractres
4. Quantificateurs
5. Groupes de capture
6. Frontires de recherche
8

Daniel Tschirhart : Programmation Java V1.34

Liste des mta caractres

Daniel Tschirhart : Programmation Java V1.34

Mta caractres : exemples


[^x]
[aeiou]
[a-z,A-Z]
[^aeiou]

T ous
T ous
T ous
T ous

caractres
caractres
caractres
caractres

sau f x
aeio u
m a ju scu le s et m in u scu le s
sau f ae io u

10

Daniel Tschirhart : Programmation Java V1.34

Squence dchappement


Il y a un problme lorsque que lon cherche un


caractre reprsentant un mta caractre comme
par exemple ^ ou $ .
Le caractre \ permet de supprimer la
smantique du mta caractre. Ainsi :
\^ , \. , et \\ , reprsentent les littraux
^ , . , et \ .
Dans une chane de caractre Java, le caractre
\ est considr comme squence
dchappement. Ainsi :
\b reprsente le caractre de contrle bell et
\\b le mta caractre \b
11

Daniel Tschirhart : Programmation Java V1.34

Rptitions
*
+
?

Rpte un nombre de fois quelconque


Rpte au moins une fois
Rpte zro ou une fois
Rpte n fois
{n }
{n,m} Rpte entre n et m fois
Rpte au minimum n fois
{n,}

12

Daniel Tschirhart : Programmation Java V1.34

Frontires de recherche


Il est souvent intressant de forcer lemplacement des motifs recherchs : en


dbut de ligne, en fin de mot
Les spcificateurs de frontire sont rsums dans le tableau suivant :

13

Daniel Tschirhart : Programmation Java V1.34

Classes de caractres

14

Daniel Tschirhart : Programmation Java V1.34

Rgles de constructions des classes


de caractres personnalises

15

Daniel Tschirhart : Programmation Java V1.34

Groupe capturant


Les parenthses permettent de regrouper les


expressions. Exemple :


(\d{1,3}\.){3}\d{1,3}
Lexpression prcdente recherche 3 squences de 1..3
digits termins par un . suivi dune autre expression de
1..3 digits. Exemple 192.168.0.1

Lexpression prcdente nest cependant pas


complte puisquelle autorise des nombres
suprieurs 255. Lexpression suivante permet de
corriger ce dfaut.


\b((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[04]\d|25[0-5]|[01]?\d\d?)\b
16

Daniel Tschirhart : Programmation Java V1.34

Quantificateurs

17

Daniel Tschirhart : Programmation Java V1.34

Mise en oeuvre des expressions rgulires


dans la classe String


Les expressions rgulires sont mises en oeuvre dans la


classe String travers les fonctions matches, replaceAll,
replaceFirst, split et dans la classe Pattern travers la
fonction matches.
Exemples :
// clate le string line en tableau de mots tokens
String[] tokens = line.split("\\b");
// supprime dans le string word tous ce qui n'est pas
caractre alphabtique minuscule.
word = word.replaceAll("[^a-z]", "");

18

Daniel Tschirhart : Programmation Java V1.34

LAPI Regex de Java




Java fourni dans son JDK depuis la version 1.4


une API standard permettant la manipulation
dexpressions rgulires.
La documentation (en anglais) de cette API se
trouve ici :
http://java.sun.com/j2se/1.4.2/docs/api/index.html

LAPI doit tre importe en dbut de fichier de


dfinition de classe comme suit :
import java.util.regex.* ;
19

Daniel Tschirhart : Programmation Java V1.34

Objets de lAPI Regex


Il existe deux classes :
Pattern
Reprsentation compile dun motif.
Matcher
Moteur de recherche dun motif dans une chane de
caractres.

et une exception
PatternSyntaxException
Exception lance lorsquune erreur apparat dans la
syntaxe des motifs employs.

20

Daniel Tschirhart : Programmation Java V1.34

Mthode matches( ) Matcher




La mthode matches() retourne vrai (true) si une


chane vrifie un motif. Cette mthode existe dans
les classes Matcher et Pattern.
Objet Matcher


Mthode prinpale :
boolean find();

Exemple :
/ / compilation de la regex
Pattern p = Pattern.compile("[a-z]");
/ / cration dun moteur de recherche
Matcher m = p.matcher("abc");
/ / lancement de la recherche de toutes les occurrences
boolean b = m.find();

21

Daniel Tschirhart : Programmation Java V1.34

Exemple RegEx1

Premier exemple

22

Daniel Tschirhart : Programmation Java V1.34

Mthode split( )


La mthode split() de la classe Pattern permet de


scinder une chane en plusieurs sous-chanes grce
un dlimiteur dfini par un motif.
Le paramtre optionnel limit permet de fixer le
nombre maximum de sous chanes gnres. Elle
retourne un tableau de String.
Syntaxe :
String[ ] split(CharSequence input [, int limit] )
Exemple :
/ / compilation de la regex
Pattern p = Pattern.compile(":");
/ / sparation en sous-chanes
String[ ] items = p.split("un:deux:trois");

23

Daniel Tschirhart : Programmation Java V1.34

Remplacements


La classe Matcher offre des fonctions qui


permettent de remplacer les occurrences
dun motif par une autre chane.
Syntaxe :
String replaceFirst(String replacement)
String replaceAll(String replacement)
 Ces mthodes remplacent respectivement la
premire occurrence et toutes les occurrences du
motif de la regex compile associs au moteur.
24

Daniel Tschirhart : Programmation Java V1.34

Remplacements exemple (2)




Exemple complet :
/ / compilation de la regex avec le motif : "th"
Pattern p = Pattern.compile("th");
/ / cration du moteur associ la regex sur la chane
"Jaime le th."
Matcher m = p.matcher("Jaime le th.");
/ / remplacement de toutes les occurrences de "th"
par "chocolat"
String s = m.replaceAll("chocolat");
25

Daniel Tschirhart : Programmation Java V1.34

Exemples d'expression rgulires

Expression
(pattern)

L'expression est utilise dans matches de la classe Pattern :


boolean b = Pattern.matches(pattern, s1);

^c

Recherche c en premire position (ici b=false).

a$

Recherche a en fin de s1 (ici b=true)

coco*

Le caractre prcdent * peut tre rpter 0..n fois. Ici on recherche coc, coco, cocoo,
cocooo, . (ici b=true)

co(co)*

Les caractres entre ( ) prcdent * peuvent tre rpter 0..n fois. Ici on recherche co,
coco, cococo, cocococo,. (ici b=true)

coc+

Le caractre prcdent + peut tre rpt 1..n fois. Ici on recherche coc, cocc, coccc,.
Affichage (ici b=true)

coc?

Le caractre prcdent ? peut tre rpt 0..1 fois. Ici on recherche co, coc
ici b=true)
26

Daniel Tschirhart : Programmation Java V1.34

Exemples d'expression rgulires (2)

Expression

Commentaire

o{2}

La lettre o doit tre reprsente au moins deux fois (ici b=true)

o{2,4}

La lettre o doit tre reprsente entre deux et quatre fois (ici b=true)

o..o

Le point remplace nimporte quel caractre (ici b=true)

Co|co

Cherche Co ou co (ici b=true)

c(o|a|e)

Cherche co ou ca ou ce (ici b=true)

[aeiou]

Cherche un des caractre entre crochets (ici b=true)

[^aeiou]

Cherche nimporte quel caractre sauf ceux entre crochets (ici b=true)

\bca

\b indique le dbut dun mot. Le mot doit commencer par ca (ici b=false)

ca\b

\b indique la fin dun mot. Le mot doit commencer terminer par ca (ici b=true)

\d

Cherche un chiffre

\D

cherche ce qui nest pas un chiffre


27

Daniel Tschirhart : Programmation Java V1.34

Exemples d'expression rgulires (3)


Expression

Commentaire

\w

matches cherche un caractre imprimable

\W

matches cherche un caractre qui ne soit pas imprimable

\s

matches cherche un espace

\S

matches cherche un caractre autre quun espace

bo(n|r)

matches cherche bon ou bor

bo(nj|r)

matches cherche bonj ou bor

bo(nj|r)*

nj ou r doivent apparatre zro ou une fois aprs bo. Ici on cherche bo bonj ou
bor

^bo(nj|r)*

Idem mais l'expression doit tre en dbut

\bbo(nj|r)+

nj ou r (prcds de bo) doivent apparatre une ou plusieurs fois en dbut de


mot

\b(bo(nj|r)+|c)

matches cherche bonj ou bor ou c en dbut de mot


28

Vous aimerez peut-être aussi