Professional Documents
Culture Documents
Tutorielpourmatriserlesexpressionsrgulires/regex
PRSENTATION
BLOG
Suivre
27abonns
MATHMATIQUES
PROGRAMMATION
PROJECT EULER
CONSEILS
A PROPOS
TAGS
Recherche
Lucas Willems
Tutoriaux
Concept, Regex
Cet expression rgulire permettant, par exemple, de reprsenter toutes les adresses
emails contenues dans un texte. Vous pouvez donc voir que la syntaxe est peu commune et
qu'un petit tutoriel s'impose pour pouvoir comprendre et utiliser le concept des
expressions rgulires. Pour suivre ce tutoriel, il vous faudra utiliser un diteur de code qui
comprend les expressions rgulires : si vous n'en avez pas encore un, vous pouvez
tlcharger et installer notepad++.
Sommaire
1 La limite des recherches classiques
2 Regex simple
2.1 Les caractres de dbut et fin de chane
2.2 Le caractres OU
3 Les ensembles de caractres
3.1 Les diffrents ensembles
ARTICLES ALATOIRES
Bonjour et au revoir ! Je m'appelle John Doe, j'ai 27 ans, j'habite en France et travaille
depuis que j'ai 20 ans. Ma passion : crire des mots, mits, mets, mats, mat... Pour me
contacter, vous pouvez envoyer un email contact@johndoe.fr ou
contact@johndoe.com ou bien m'appeler au 06 07 08 09 10. Vous pouvez aussi aller
voir mon blog l'adresse johndoe-blog.fr. Bonjour et au revoir
1/7
3/4/2015
Tutorielpourmatriserlesexpressionsrgulires/regex
mot Bonjour. La faon la plus simple est alors de faire un simple Ctrl+F comme on en a
l'habitude : pas besoin d'utiliser les regex. Suite cette recherche, les 2 occurrences de
Bonjour devraient tre slectionn. Normal.
Maintenant, imaginons que nous voulons rechercher, cette fois-ci, seulement le
motBonjourqui se trouve au tout dbut du texte. Comment faire avec un simple Ctrl+F ? Ce
n'est tout simplement pas possible : voici donc la limite des recherches classiques. Pour
faire des recherches plus complexes, il nous faudra utiliser les regex.
2 Regex simple
Reprenons notre recherche du mot Bonjour du dbut de texte, mais cette fois, en utilisant
les regex, et plus particulirement les caractres de dbut et fin de chane.
2.1 Les caractres de dbut et fin de chane
Les caractres de dbut et de fin de chane, respectivement ^ et $, reprsentent, comme
leur nom l'indique, le dbut et la fin de la chane. Donc, si nous retournons dans notre
diteur de code, que nous faisons de nouveau Ctrl+F, que nous activons les expressions
rguliresau passage et que nous entrons dans le champ de recherche la regex suivante :
^Bonjour
L'diteur de code devrait slectionner seulement le motrevoir qui se situe la fin du texte.
2.2 Le caractres OU
Imaginons maintenant que nous voulons rechercher, dans le texte, les mots Bonjour
etrevoir, c'est dire le motBonjour OU le motrevoir : nous devrons alors utiliser la barre
verticale |. Ainsi la regex suivante slectionnera toutes les occurrences de Bonjour et
revoir:
Bonjour|revoir
Il est aussi possible de slectionner les occurrences du mot Bonjour se trouvant au dbut
du texte et du motrevoirse trouvant la fin, ce qui revient fusionner, en les sparant par
une barre verticale, les 2 regex vues dans la sous partie prcdente. Voici donc la regex
correspondant :
^Bonjour|revoir$
Mais il y a plus simple et ce grce aux ensembles de caractres qui font office, en quelques
sortes, de OU en plus courts et plus puissants. Un ensemble de caractre est dlimit par
des crochets dans lesquels se trouvent les caractres faisant parti du OU. Ainsi, la regex
http://blog.lucaswillems.com/772/tutorielexpressionsregulieresregex
2/7
3/4/2015
Tutorielpourmatriserlesexpressionsrgulires/regex
suivante :
m[oai]ts
est beaucoup plus succincte que la prcdente et slectionne les mmes mots. Cette regex
peut tre expliciter par la phrase suivante : "Slectionne les parties du texte o il y a un m,
suivi d'un o ou d'un a ou d'un i, suivi d'un t, suivi d'un s." Les ensembles de caractres
permettent aussi d'exclure des caractres grce l'accent circonflexe ^. La regex suivante :
m[^oai]ts
slectionnera, cette fois-ci, seulement le mots mets et peut tre explicite par la phrase
suivante : "Slectionne les parties du texte o il y a un m, suivi d'une lettre qui n'est ni o, ni
a, ni i, suivi d'un t, suivi d'un s." Enfin, imaginons que nous voulons slectionner tous les
mots commenant par un m, suivi de n'importe quelle lettre, suivi d'un t, suivi d'un s. La
regex qui nous viendrait l'esprit serait une regex de ce type :
m[abcdefghijklmnopqrstuvwxyz]ts
La regex serait donc longue et fastidieuse crire, surtout que pour celle-ci, seules les
minuscules ont t slectionnes ! Heureusement, un moyen plus simple existe pour crire
de telles regex : cela s'appelle les intervalles et se note [debut intervalle-fin intervalle].
Voici quelques petites exemples :
Intervalle
Equivalent
Traduction
[a-z]
[abcdefghijklmonpqrstuvwxyz]
Lettres minuscules de a
z
[A-Z]
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
Lettres majuscules de A
Z
[0-9]
[0123456789]
Chiffres de 0 9
[a-z0-9]
[abcdefghijklmonpqrstuvwxyz0123456789]
Lettres minuscules de a
z ou chiffres de 0 9
Reprenons donc notre regex et utilisons les intervalles. Nous obtenons alors :
m[az]ts
Equivalent
\w
[a-zA-Z0-9_]
\d
[0-9]
\n
Un retour la ligne
\t
Une tabulation
4 Les quantificateurs
Nous venons de voir qu'un ensemble de caractres permet de dfinir de manire trs
simple les valeurs possible d'un caractre. Mais qu'en est-il si l'on dfinir les mmes
valeurs possibles pour plusieurs caractres ? Par exemple, si l'on veut slectionner les
http://blog.lucaswillems.com/772/tutorielexpressionsregulieresregex
3/7
3/4/2015
Tutorielpourmatriserlesexpressionsrgulires/regex
parties du texte o il y a un m, suivi d'un a, suivi de 3 fois n'importe quelle lettre minuscule,
est-on oblig d'utiliser une regex de ce type :
ma[az][az][az]
Non. Il existe une mthode plus simple qui consiste utiliser les quantificateurs : ce sont
des caractres qui indiquent le nombre de rptition du caractre ou de la suite de
caractre qui les prcdent. Le quantificateur, dans sa forme explicite, peut s'crire de 4
faons :
{min,max} : le nombre de rptition varie entre la valeur minimale et la valeur
maximale incluses
{min,} : le nombre de rptition varie entre la valeur minimale incluse et l'infini
{,max} : le nombre de rptition varie entre 0 et la valeur maximale incluse
{nombre} : le nombre de rptition correspond au nombre marqu entre les
accolades
Par exemple, la regex suivante :
[azAZ]{6}
Traduction
quivalent
0 ou plusieurs rptitions
{0,}
1 ou plusieurs rptitions
{1,}
0 ou 1 rptition
{,1}
5 L'chappement
Reprenons notre texte et imaginons que l'on veuille y slectionner les noms de domaine
des adresse email contact@johndoe.fr et contact@johndoe.com. La regex qui nous
viendrait donc la tte serait la suivante :
johndoe.[az]{2,3}
Et malheureusement, ce n'est pas exactement celle-l, car mme si les 2 noms de domaine
sont bien slectionns, la chane de caractrejohndoe-blol'est aussi.
Ce problme vient alors du point prsent dans la regex car rappelez-vous que le point est
un ensemble de caractres prconus qui reprsente n'importe quel caractre : il peut
reprsenter un a, un 2 mais aussi un tiret. Pour faire comprendre que le point prsent dans
la regex est bien un point et non pas un ensemble de caractres, il nous faut chapper le
point avec le caractre d'chappement qui est le backslash \. Ainsi la regex correcte est la
suivante :
johndoe\.[az]{2,3}
Cet chappement n'est pas seulement valable pour le point, mais pour tous les caractres
qui ont, de base, une valeur diffrente que celle habituelle. En voici la liste : ^ $ \ |{ }[ ]( ) ?
# !+ * .
6 Mise en pratique
Maintenant que vous possdez d'assez bonnes bases pour comprendre et utiliser les
expressions rgulires, il est temps de sortir des simples recherches dans l'diteur de
code et de passer des cas plus pratiques par l'tude de 2 exemples d'utilisation des
regex dans le langage de programmation PHP.
6.1 Vrifier si un numro de tlphone est correcte
Le premier exemple consiste vrifier si un numro de tlphone est correcte. Pour se
faire, imaginons que l'on ait cr, dans une page form.html, un formulaire contenant
http://blog.lucaswillems.com/772/tutorielexpressionsregulieresregex
4/7
3/4/2015
Tutorielpourmatriserlesexpressionsrgulires/regex
plusieurs champs dont un nomm numerodans lequel l'utilisateur saisirait son numro de
tlphone. Une fois le formulaire complt, l'utilisateur cliquerait sur Valider et enverrait
ses donnes vers une page traitement.php dans laquelle on les vrifierait avant de les
entrer dans une base de donne. La partie nous concernant donc est de vrifier la validit
de ce numro de tlphone.
Commenons par la regex et admettons qu'elle permette de rechercher les numros
franais, commenant par 0 ou +33 et possdant 9 chiffres sans compter le 0 ou +33. Ainsi,
voici une criture possible de celle-ci :
(0|\+33)[19](*[09]{2}){4}
Comme dans l'exemple prcdent, vous avez pu remarquer l'apparition d'une nouvelle
http://blog.lucaswillems.com/772/tutorielexpressionsregulieresregex
5/7
3/4/2015
Tutorielpourmatriserlesexpressionsrgulires/regex
12Commentaires
Recommend
LeblogdeLucasWillems
Partager
S'identifier
Lesplusrcents
Participerladiscussion
jige23 ilya20jours
BonjourLucas,mercipourcenouveau"tuyau"quifonctionneparfaitement,voilun
blogquejeconseillevivementauxutilisateursamateursdeformulairespourleurs
associations...ouautres!BonWE.
Rpondre Partager
LucasWillems
Modo >jige23
ilya20jours
Derienetmercibeaucouppourtongentilmessage!
Rpondre Partager
jige23 ilya21jours
Lucas,dsoldetedranger,pourlenomc'estbontuasrpondumonproblme,
maispourlechamp"Prnom"jesaisfairepourlapremirelettredelachaneen
majuscule,maisavecunprnomcomposdugenre"MarieLouise",ledeuxime
motn'estpasprisencompte!Commentadapterle"regex"lapremirelettrede
chacundesmotsdelachane?Mercid'avance!
Rpondre Partager
LucasWillems
Modo >jige23
ilya20jours
D'accord.
Tupeuxtestercetteregex:^((\b[AZ][az]+)([\s]*))+$
Elleregardesilachainedecaractreestunesuccessiondemots,spars
parunespaceouuntiret,commenantparunemajuscule.
Rpondre Partager
jige23 ilya21jours
Bonjour,mercipourcetterponserapide,jenevoudraispaspasserpourunem.......,
maispourlechamp"Prnom"j'aiutilisle"regex"suivant:^[AZ]{1}leproblmec'est
quec'estvalablequepourlapremirelettredelachaneetneprendpasencompte
chaquepremirelettredechaquemot!
Rpondre Partager
LucasWillems
Modo >jige23
ilya21jours
Queveuxtuexactement?Tuveuxquetoutesleslettressoientenmajuscule
oujustela1relettredechaquemot?
Rpondre Partager
http://blog.lucaswillems.com/772/tutorielexpressionsregulieresregex
6/7
3/4/2015
Tutorielpourmatriserlesexpressionsrgulires/regex
jige23 ilya22jours
Bonjourtous,noviceenlamatire,jerecherchelasolution(leregex)quipermettrait
d'imposerlasaisied'unmotenmajusculesdansunformulaire"Google"!Merci!
Rpondre Partager
LucasWillems
Modo >jige23
ilya21jours
TupeuxutiliserlesRegexdanslesformulairesGoogle?
Sic'estlecas,tupeuxutiliserleRegexsuivant:
^[^az]+$
Quicorrespondlachainesansaucuneminiscule,maislesautres
caractres(espace...)sontautoriss.
Rpondre Partager
olivier ilya2mois
Enfindesexplicationsclairesetconcisessurlesregex.Merci++
Rpondre Partager
LucasWillems
Modo >olivier
ilya2mois
MercibeaucoupOlivier.Contentquemonarticleaitput'aider.
Rpondre Partager
JeanCharlesGautard ilya5mois
Merci!
Vousabordeztoutcequim'atessentiel:)
Rpondre Partager
LucasWillems
Modo >JeanCharlesGautard
ilya2mois
Mercibeaucouppourvotrecommentairequimefaittrsplaisir!
S'abonner
Rpondre Partager
AjoutezDisqusvotresiteweb!
ViePrive
http://blog.lucaswillems.com/772/tutorielexpressionsregulieresregex
7/7