Vous êtes sur la page 1sur 20

6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)

Accueil (https://www.lucaswillems.com/fr)
Projets (https://www.lucaswillems.com/fr/projects)
Articles (https://www.lucaswillems.com/fr/articles)
Outils (https://www.lucaswillems.com/fr/tools)
A propos (https://www.lucaswillems.com/fr/about)
Contact (https://www.lucaswillems.com/fr/contact)

(https://www.lucaswillems.com/img/lcswillems-
400x400.png) Like 959

LUCAS WILLEMS Follow 261 followers


(https://www.lucaswillems.com/fr)
Un étudiant de 21 ans passionné par les maths et la
programmation

Tutoriel pour maîtriser les expressions régulières


Article

Les expressions régulières, ou plus communément regex (contraction de regular expression) permettent
de représenter des modèles de chaînes de caractère. Ce sont des outils très puissants et très utilisés : on
peut les retrouver dans de nombreux langages comme le PHP, MySQL, Javascript... ou encore dans des
logiciels d'édition de code ! Cependant, si cet outil est très puissant, il est relativement difficile à
appréhender au début car les expressions régulières peuvent prendre des formes de ce genre :

#^[a-zA-Z-]+@[a-zA-Z-]+\.[a-zA-Z]{2,6}$#

Cet expression régulière permettant, par exemple, de représenter 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 régulières. Pour suivre ce tutoriel, il vous
faudra utiliser un éditeur de code qui comprend les expressions régulières : si vous n'en avez pas encore
un, vous pouvez télécharger et installer notepad++ (http://notepad-plus-plus.org/fr/).

We use cookies to track usage and preferences. I Understand ()


https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 1/20
6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)
Sommaire

1 La limite des recherches classiques


2 Regex simple
2.1 Les caractères de début et fin de chaîne
2.2 Le caractères OU
3 Les ensembles de caractères
3.1 Les différents ensembles
3.2 Les ensembles préconçus
4 Les quantificateurs
5 L'échappement
6 Mise en pratique
6.1 Vérifier si un numéro de téléphone est correcte
6.2 Détecter les liens et les rendre cliquable

La limite des recherches classiques


Pour commencer simplement, ouvrons notre éditeur de code et collons y le texte suivant :

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

We use cookies to track usage and preferences. I Understand ()


https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 2/20
6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)

Puis, recherchons y, en rendant la recherche sensible à la casse (voir image précédente), le mot Bonjour.
La façon 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 sélectionné. Normal.

Maintenant, imaginons que nous voulons rechercher, cette fois-ci, seulement le mot Bonjour qui se trouve
au tout début 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.

Regex simple
Reprenons notre recherche du mot Bonjour du début de texte, mais cette fois, en utilisant les regex, et
plus particulièrement les caractères de début et fin de chaîne.

Les caractères de début et fin de chaîne

Les caractères de début et de fin de chaîne, respectivement ^ et $, représentent, comme leur nom


l'indique, le début et la fin de la chaîne. Donc, si nous retournons dans notre éditeur de code, que nous
faisons de nouveau Ctrl+F, que nous activons les expressions régulières au passage et que nous entrons
We use cookies to track usage and preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 3/20
dans le champ de recherche la regex suivante
6/14/2019
:
Tutoriel pour maîtriser les expressions régulières (regex)

^Bonjour

L'éditeur de code devrait sélectionner seulement le mot Bonjour se trouvant au début du texte. Et si nous
remplaçons la regex que nous venons d'entrer par celle-ci :

revoir$

L'éditeur de code devrait sélectionner seulement le mot revoir qui se situe à la fin du texte.

Le caractères OU

Imaginons maintenant que nous voulons rechercher, dans le texte, les mots Bonjour et revoir, c'est à dire
le mot Bonjour OU le mot revoir : nous devrons alors utiliser la barre verticale |. Ainsi la regex suivante
sélectionnera toutes les occurrences de Bonjour et revoir :

Bonjour|revoir We use cookies to track usage and preferences. I Understand ()


https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 4/20
Il est aussi possible de sélectionner les occurrences
6/14/2019
du mot Bonjour se trouvant au début du texte et du
Tutoriel pour maîtriser les expressions régulières (regex)

mot revoir se trouvant à la fin, ce qui revient à fusionner, en les séparant par une barre verticale, les 2
regex vues dans la sous partie précédente. Voici donc la regex correspondant :

^Bonjour|revoir$

Les ensembles de caractères


Passons maintenant à des regex un peu plus complexes, et beaucoup plus puissantes, en nous attardons
sur les ensembles de caractères.

Les différents ensembles

Maintenant, nous voulons chercher dans notre texte, les mots mots, mats et mits. Nous pourrions très
bien utiliser cette regex :

mots|mats|mits

Mais il y a plus simple et ce grâce aux ensembles de caractères qui font office, en quelques sortes, de OU
en plus courts et plus puissants. Un ensemble de caractère est délimité par des crochets dans lesquels se
trouvent les caractères faisant parti du OU. Ainsi, la regex suivante :

m[oai]ts

est beaucoup plus succincte que la précédente et sélectionne les mêmes mots. Cette regex peut être
expliciter par la phrase suivante : "Sélectionne 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 caractères permettent aussi d'exclure des caractères
grâce à l'accent circonflexe ^.  La regex suivante :

m[^oai]ts

sélectionnera, cette fois-ci, seulement le mots mets et peut être explicitée par la phrase suivante :
"Sélectionne 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 sélectionner tous les mots commençant 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é
sélectionnées ! Heureusement, un moyen plus simple existe pour écrire de telles regex : cela s'appelle les
[debut
intervalles et se note We use intervalle-fin
cookies to intervalle
track usage].and
Voici quelques petites
preferences. exemples() :
I Understand
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 5/20
6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)
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[a-z]ts

ce qui sélectionne le mot mets en plus des mots mots, mats et mits.

Les ensembles préconçus

Un ensemble préconçu est une façon très simple de représenter plusieurs intervalles. Voici quelques
exemples :

Ensemble Equivalent

. Absolument n'importe quel charactère

\w [a-zA-Z0-9_]

\d [0-9]

\n Un retour à la ligne

\t Une tabulation

Ainsi, cette regex :

m\wts

sélectionnera les mêmes éléments que celle-ci :

m[a-zA-Z0-9_]ts

Les quantificateurs
Nous venons de voir qu'un ensemble de caractères permet de définir de manière très simple les valeurs
possible d'un caractère. Mais qu'en est-il si l'on définir les mêmes valeurs possibles pour plusieurs
caractères ? Par exemple, si l'on veut sélectionner les parties du texte où il y a un m, suivi d'un a, suivi de 3
fois n'importe quelle We
lettre
useminuscule,
cookies toest-on obligéand
track usage d'utiliser une regexI Understand
preferences. de ce type : ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 6/20
6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)
ma[a-z][a-z][a-z]

Non. Il existe une méthode plus simple qui consiste à utiliser les quantificateurs : ce sont des caractères
qui indiquent le nombre de répétition du caractère ou de la suite de caractère qui les précèdent. Le
quantificateur, dans sa forme explicite, peut s'écrire de 4 façons :

{min,max} : le nombre de répétition varie entre la valeur minimale et la valeur maximale incluses
{min,} : le nombre de répétition varie entre la valeur minimale incluse et l'infini
{,max} : le nombre de répétition varie entre 0 et la valeur maximale incluse
{nombre} : le nombre de répétition correspond au nombre marqué entre les accolades

Par exemple, la regex suivante :

[a-zA-Z]{6}

permet de sélectionner les parties du texte où il y a 6 lettres consécutives. Celle-ci :

[0-9]{2,4}

permet de sélectionner les parties du texte où il y a entre 2 et 4 chiffres consécutifs. Comme pour les
ensembles de caractères, il existe aussi des quantificateurs préconçus. En voici la liste :

Quantificateur Traduction Équivalent

* 0 ou plusieurs répétitions {0,}

+ 1 ou plusieurs répétitions {1,}

? 0 ou 1 répétition {,1}

L'échappement
Reprenons notre texte et imaginons que l'on veuille y sélectionner les noms de domaine des adresse
email contact@johndoe.fr et contact@johndoe.com. La regex qui nous viendrait donc à la tête serait la
suivante :

johndoe.[a-z]{2,3}

Et malheureusement, ce n'est pas exactement celle-là, car même si les 2 noms de domaine sont bien
sélectionnés, la chaîne de caractère johndoe-blo l'est aussi.

Ce problème vient alors du point présent dans la regex car rappelez-vous que le point est un ensemble de
caractères préconçus qui représente n'importe quel caractère : il peut représenter un a, un 2 mais aussi un
tiret. Pour faire comprendre que le point présent dans la regex est bien un point et non pas un ensemble
We use cookies to track usage and preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 7/20
de6/14/2019
caractères, il nous faut échapper le point avec le caractère d'échappement qui est le backslash \. Ainsi la
Tutoriel pour maîtriser les expressions régulières (regex)

regex correcte est la suivante :

johndoe\.[a-z]{2,3}

Cet échappement n'est pas seulement valable pour le point, mais pour tous les caractères qui ont, de
base, une valeur différente que celle habituelle. En voici la liste : ^ $ \ | { } [ ] ( ) ? # ! + * .

Mise en pratique
Maintenant que vous possédez d'assez bonnes bases pour comprendre et utiliser les expressions
régulières, 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.

Vérifier si un numéro de téléphone est correcte

Le premier exemple consiste à vérifier si un numéro de téléphone est correcte. Pour se faire, imaginons
que l'on ait créé, dans une page form.html, un formulaire contenant plusieurs champs dont un nommé
numero dans lequel l'utilisateur saisirait son numéro de téléphone. Une fois le formulaire complété,
l'utilisateur cliquerait sur Valider et enverrait ses données vers une page traitement.php dans laquelle on
les vérifierait avant de les entrer dans une base de donnée. La partie nous concernant donc est de vérifier
la validité de ce numéro de téléphone.

Commençons par la regex et admettons qu'elle permette de rechercher les numéros français,
commençant par 0 ou +33 et possédant 9 chiffres sans compter le 0 ou +33. Ainsi, voici une écriture
possible de celle-ci :

(0|\+33)[1-9]( *[0-9]{2}){4}

Peut-être venez vous de remarquer l'apparition de parenthèses. Celles-ci permettent de créer des suites
(ou groupe) de caractères et de les stocker en mémoire. Ainsi, si, par exemple, le caractère précédent un
quantificateur est en fait une suite de caractère, ce n'est pas le caractère précédent mais la suite de
caractère qui sera répétée plusieurs fois. Voici maintenant ce que donne le code PHP entier comprenant la
regex :

<?php
$numero = $_POST['numero'];
if (preg_match('#(0|\+33)[1-9]( *[0-9]{2}){4}#', $numero)) {
echo "Le numéro de téléphone entré est correct.";
// On peut ajouter le numéro à la base de donnée
} else {
echo "Le numéro de téléphone entré est incorrect.";
// On ne peut pas ajouter le numéro à la base de donnée
}
?> We use cookies to track usage and preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 8/20
Là 6/14/2019
aussi, 2 remarques sont à faire sur ce code :
Tutoriel pour maîtriser les expressions régulières (regex)

la fonction preg_match (http://php.net/manual/fr/function.preg-match.php) fait son apparition : celle-


ci prend en paramètre la regex ainsi que le texte dans lequel chercher et retourne true si la chaîne a été
trouvée dans le texte, false sinon.
l'ajout d'un dièse # avant et après notre regex. Celui, pas forcément un dièse, permet de délimiter le
début et la fin de notre regex, et ainsi, offre la possibilité d'ajouter, après le caractère marquant la fin de
la regex, des options de recherche
(http://php.net/manual/fr/reference.pcre.pattern.modifiers.php) comme, par exemple, un i permettant
de rendre une regex insensible à la casse

Détecter les liens et les rendre cliquable

Passons maintenant au second exemple qui est aussi assez pratique et qui consiste à détecter la présence
d'url dans un texte et à les convertir en liens cliquables. Imaginons que le contexte soit le même que celui
de l'exemple précédent et que, en plus de saisir son  numéro de téléphone, l'utilisateur saisisse du texte
pouvant contenir des url. Cette fois-ci, la partie nous intéressant consiste à rechercher ces url dans le texte
et à les transformer en liens cliquables.

Pour commencer, définissons la forme que peuvent prendre les url. Celles-ci commenceront par http ou
https, seront suivies de ://, suivies des sous-domaines et du nom de domaine, ne contenant que des
chiffres, lettres, tirets et points et une extension de 2 à 4 caractères, suivies enfin du chemin d'accès
(facultatif) comprenant tous les caractères sauf l'espace. Voici donc une regex possible pour rechercher
des url :

https?://[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}(/\S*)?

où \S signifie tout sauf l'espace et où, petit rappel, le ? permet de rendre facultatif le caractère le
précédent. Voici maintenant le code entier :

<?php
$message = $_POST['message'];
$message = preg_replace(
'#https?://[a-zA-Z0-9-\.]+\.[a-zA-Z]{2,4}(/\S*)?#',
'<a href="$0" target="_blank">$0</a>',
$message
);
echo $message;
?>

Comme dans l'exemple précédent, vous avez pu remarquer l'apparition d'une nouvelle fonction,
preg_replace (http://php.net/manual/fr/function.preg-replace.php), permettant de remplacer des
caractères dans un texte en utilisant les regex. Celle-ci prend en paramètre la regex, la chaîne de

We use cookies to track usage and preferences. I Understand ()


https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 9/20
remplacement,
6/14/2019
et le texte contenant les chaînes à remplacer, et retourne le texte une fois les
Tutoriel pour maîtriser les expressions régulières (regex)

remplacements effectués.

Vous avez aussi pu remarquer la présence de $0 (appelées référence) dans le second paramètre de cette
fonction. Ces références correspondent au texte satisfaisant toute la regex. D'autres références existent
comme $1, $2, $3... qui, elles, correspondent au texte satisfaisant la première parenthèse de la regex, la
seconde, la troisième... Si vous n'avez pas bien compris le fonctionnement de ces références, je vous
conseille de bien regarder les exemples données dans la documentation PHP de cette fonction.

Le tutoriel touche à sa fin. J'espère qu'il vous aura permis de comprendre le fonctionnement des
expressions régulières et d'en acquérir de bonnes bases. N'hésitez pas aussi à me donner votre avis en
laissant un commentaire ou en m'envoyant un mail.

Recherche

Voici les recherches relatives à cette page :

regex tuto
tuto regex
tutoriel regex
regex tutorial
regex tutoriel
tuto expression régulière
regex pour les nuls

Commentaires

Qu'en pensez-vous ? Donnez moi votre avis (positif ou négatif) pour que je puisse l'améliorer.

66 Comments Lucas Willems 


1 Login

 Recommend 11 t Tweet f Share Sort by Newest

Join the discussion…

LOG IN WITH
OR SIGN UP WITH DISQUS ?

Name

Jean • 13 days ago


Bonjour,

We use cookies to track usage and preferences. I Understand ()


Explications très claires. Merci!
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 10/20
Une
6/14/2019 petite remarque: numéro est masculin, donc
Tutoriel pour un numéro
maîtriser est correct
les expressions régulières (regex)

"Vérifier si un numéro de téléphone est correcte"


Cordialement
△ ▽ • Reply • Share ›

Did • 4 months ago


bonjour,
je ne parviens pas à écrire la regex qui me permettra de tracker un formulaire :
je dois exclure des URL contenant : step-2|step-3|?gsh=
j'ai tenté ceci, mais ça ne marche pas, et je sèche : (?!(step-2|step-3|gsh))(/reprise-)

savez-vous comment procéder ?


merci,
did
△ ▽ • Reply • Share ›

Allal Zaki • 7 months ago


Merci beaucoup, votre article est très cool, bien expliqué, il vous donne une idée complète sur les
regexp,et vous ouvre votre appétit pour en savoir plus sur le sujet en question.
Super
△ ▽ • Reply • Share ›

Lucas Willems Mod > Allal Zaki • 4 months ago


Merci beaucoup pour votre message !!
△ ▽ • Reply • Share ›

Luc Negroni • 10 months ago


Bonjour Lucas
Une question pour l'exemple du numero de tel.
Pourquoi mettre * dans l'expression (0|\+33)[1-9]( *[0-9]{2}){4}
Luc
△ ▽ • Reply • Share ›

Jérémy > Luc Negroni • 9 months ago


Tu remarqueras qu'il y a un espace juste avant le "*" . Cela veut donc dire qu'il peut y avoir 0, 1
ou plusieurs espaces.

Dans ce contexte précis, cela veut dire que l'utilisateur pourra espacer (ou pas) les parties de
son numéro de téléphone (0102030405 ou 01 02 04 05 ou encore même 01 02 03 0405)
△ ▽ • Reply • Share ›

Clément Szabo • a year ago


Super article ! Bien expliqué, j'ai tout compris !
Mais quelques petites fautes d'orthographe... notemment le numero de telephone "correct" et plein de
petites autres dans le genre ;)
△ ▽ • Reply • Share ›

We useMod
Lucas Willems cookies to track
> Clément Szabo •usage and
a year ago preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 11/20
6/14/2019 Merci pour le retour ! En effet,Tutoriel
il y a des fautes les
pour maîtriser d'orthographe, je ne(regex)
expressions régulières m'en étais jamais rendu
compte
1△ ▽ • Reply • Share ›

Clément Szabo > Lucas Willems • a year ago


J'aurais bien voulu les corriger haha, mais au pire tu peux m'envoyer un message sur
facebook et je te file le HTML corrigé de la page demain si tu veux
△ ▽ • Reply • Share ›

Show more replies

Mendos Chapka • a year ago


Bonjour,
j'échoue dans ma tentative de créer une RegExp.
J'utilise une API et la donnée que je reçois est une adresse. Je voudrais exclure tout chiffre avant de
l'afficher sur ma page via le dom.
Merci par avance.
Continue comme ça Lucas !
△ ▽ • Reply • Share ›

Saeed Shairzad • a year ago


Bonjour,
Quelqu'un pourrait me donner une expression régulière pour trouver exactement l'ensemble de
formes des verbes "définir et redéfinir" au présent et à l'imparfait?
merci par avance!
△ ▽ • Reply • Share ›

Jérémy Gilruiz > Saeed Shairzad • a year ago


En 1er tu te crée un array avec tous les mots des 2 verbes :
$aArray[2] = ["définis", "définit"] ; Tu adaptes la taille de ton array en fonction du nombre de
mots que tu auras mis dans tes crochets

Ensuite tu crée ton array dans une boucle "For" qui parcours les mots de ton array avec dans
ta boucle ta regex qui contiendra en variable ton array.
△ ▽ • Reply • Share ›

Anthony Regnier • a year ago


Bonjour ! Je n'arrive pas à trouver le bon regex pour enlever les espaces entre ":" et le début de la
réponse... Une idée ? (Ils ne s'affichent pas dans le post, probablement car c'est formatté d'une façon
spéciale)

OS Configuration: Member Workstation


OS Version: 10.0.16299
Site Name: N/A
Roaming Profile: N/A
Local Profile: C:\Users\aregnier
Connected over a slow link?: No
△ ▽ • Reply • Share ›
We use cookies to track usage and preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 12/20
Jé é Gil i > A th R i
6/14/2019 Jérémy Gilruiz > Anthony Regnier Tutoriel
• a yearpour
agomaîtriser les expressions régulières (regex)
[^:]+:\s?[^:]+

ca fonctionne chez moi


△ ▽ • Reply • Share ›

Gaspard Benoit • 2 years ago


L'article est vraiment bien, sauf quelques petites fautes d'orthographe
1△ ▽ • Reply • Share ›

Diane Pelletrat de Borde • 2 years ago


Bravo pour cet article extrêmement bien écrit et très pédagogique!
△ ▽ • Reply • Share ›

Jean-Marc Amon • 2 years ago


Bonjour et Merci pour l'article le plus clair que j'ai trouvé sur les Regex
50 △ ▽ • Reply • Share ›

Lucas Willems Mod > Jean-Marc Amon • a year ago


Merci !
△ ▽ • Reply • Share ›

Francis Faure • 2 years ago


Bonjour
J'ai une chaine de caractere du style:

If OC_Device_type = {NT*, MTZ1*} then OC_Device_nb.of.poles ={3P :: 4P} and OC_Withdrawability


={WWW :: FFF }

je voudrais extraire mes "variables" 'OC_Device_type', 'OC_Device_nb.of.poles' et '


OC_Withdrawability'
ainsi que les valeurs autorisée respectives ' {NT*, MTZ1*}', '{3P :: 4P}' et '{WWW :: FFF }'

pour les variables, j'ai le pattern suivant : "OC[\w\.\-]*" qui fonctionne très bien

par contre pour les valeurs autotorisées, j'essaye avec le pattern "[^(={)]*[(})$]" mais je n'y arrive pas

Pouvez-vous m'aider ?
Très cordialement
△ ▽ • Reply • Share ›

theta > Francis Faure • 2 years ago


ca ne marche pas avec \{.*\} ?
Là c'est sensé matcher avec {"n'importe quoi"}

Sinon plus restrictif: \{\w+\*, \w+\*\} pour les {NT*, MTZ1*}


et \{\w+ :: \w+\} pour {3P :: 4P} et {WWW :: FFF }
△ ▽ • Reply • Share ›

Mpikalokalo Amorom-patana • 2 years ago


We use cookies to track usage and preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 13/20
Bonjour et Merci pour cet article très intéressant Alors si j'ai bien compris les regex facilitent
Bonjour et Merci pour cet article très intéressant.
6/14/2019
Alors si j ai bien compris, les regex facilitent
Tutoriel pour maîtriser les expressions régulières (regex)
beaucoup la recherche de la présence de caractères ou d'une séquence de caractères par contre
elles sont limitées dans la mesure ou elles ne permettent pas de détecter l'absence d'un caractère en
particulier... par exemple si j'ai un input de type texte dans un formulaire html dans lequel je souhaite
n'accepter que les chaines dépourvues d'espace il m'est impossible de l’écrire en thermes de regex ?
Le seul moyen que j'ai trouvé pour y parvenir est d'écrire la déclaration contraire dans ma regex et
d'utiliser la négation dans un langage de programmation (JavaScript dans mon cas)

en JavaScript,
var regex = /\s/;

ensuite quelque-chose comme..

if ( !(document.querySelector("input[type='text']")).textContent).match(regex) ){
// suite du traitement
}

est-ce possible de l’écrire entièrement sous forme de regex afin d’éviter d'utiliser la négation , et dans
ce cas comment dois-je écrire ma regex ? (dans le cas ou on n'a pas recours à un langage de
programmation par exemple).
Merci :)
△ ▽ • Reply • Share ›

Trip To Kazakhstan • 2 years ago


Bonjour Lukas , tres interessant ton article sur les regex , bien que ca devient vite compliqué pour un
débutant que je suis...
Voila , mon probleme est le suivant : J´ai environ 6000 fichiers textes en txt. Et avec beaucoup de
repetitions dans chacun. Je cherche deseperement une regex qui puisse d´un seul coup me ranger
les phrases (ou chaines ) identiques pour ne garder qu une seule de chaque. Je ne sais pas si mon
probleme est assez clair.
Exemple :
le ciel est gris Le ciel est grand et gris
Le ciel est grand et gris
Le ciel est grand et gris ...les oiseaux chantent
Le vin fleure bon et la vigne court
Le vin fleure bon ..et la vigne court
Le ...vin fleure bon et la vigne court Le ciel est grand et gris

Et je voudrais obtenir:
le ciel est gris
le ciel est grand et gris
les oiseaux chantent
le vin fleure bon et la vigne court

Ceci se répétant sur des centaines de chaines differentes et a travers 6000 fichiers texte...

J´ai un espoir qu´une Regex puisse faire le travail ??

Merci mille fois pour votre aide ! ( J´ai arrêté les maths en 4e !)

Steph
△ ▽ • ReplyWe use ›cookies to track usage and preferences. I Understand ()
• Share
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 14/20
6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)
Lucas Willems Mod > Trip To Kazakhstan • 2 years ago

Salut ! Je crois que les Regex ne vont pas permettre de faire ce que tu veux... C'est beaucoup
trop compliqué. Le plus simple serait d'après moi de faire un programme Python qui liste tes
bouts de phrase et supprime les doublons.
△ ▽ • Reply • Share ›

Hervels • 2 years ago


Bonjour,
Je cherche à remplacer dans une table sql pour une colonne tous les zéros, pas un chiffre aléatoire
après 398152, est-ce possible ? Merci
△ ▽ • Reply • Share ›

mondissa • 3 years ago


Bonjour,
tout d'abord merci pour votre turo sur les expressions régulières. Très clair.
J'ai un sujet que je n'arrive pas à résoudre avec notepad++ : je dispose d'un texte de plusieurs lignes,
terminée par CR LF. Je dois faire en sorte que toutes les lignes soient comblées avec des espaces à
la fin jusqu'à 120 caractères au total par ligne. Je ne vois pas comment faire. Auriez-vous une solution
svp ? Merci d'avance.
△ ▽ • Reply • Share ›

Philippe • 3 years ago


Bonjour, Lucas merci pour ce tuto ;)
J'ai un validation pattern sur un champ email de ce type
^([\w0-9\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z]{2,4}$
comme puis je faire si je veux interdire le domaine sfr et msn par exemple ?
Merci.
△ ▽ • Reply • Share ›

Stephane • 3 years ago


Salut Lucas merci
vraiment pour ce tuto très interessant. S'il te plaît j'ai un soucis concernant les regex dans le domaine
de la programmation. jai une chaine de charchtère en forme XML de type String. comment pourrai je
extraire les infos necessaires entre les tag.
"<customer xmlns:xlink="http://www.w3.org/1999/xlink"> <id>18</id>
<firstname>Sylvia</firstname>Fuller</lastname> <street>158 - 20th Ave.</street> <city>Paris</city>
<id>23</id> <firstname>Martin</firstname>Muster</lastname> <street>2- 10th Ave.</street>
<city>Paris</city>
</customer>"
comment pourrai je extraire ces infos?
merci d'avance
△ ▽ • Reply • Share ›

Jean-claude Arragon • 3 years ago


Bonjour, débutant en expression regulières j'utilise un utilitaire qui me permet d'écrire les tags mp3 à
partir des noms de fichiers (Music Tag Editor) mais qui nous laisse seul sur la façon de parametrer les
extractions en exp. regulieres!!!; j'ai lu une trentaine de pages sur le sujet , j'ai compris comment faire
We use cookies to track usage and preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 15/20
pour sélectionner une chaine de caracteres COMMENCANT par un caratere spécifique ou
pou sé ect o e u e c a e de ca acte es CO C pa u ca ate e spéc que ou
6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)
FINISSANT par un caractere ou groupe de caractere spécifique, pas compris quel signe utiliser pour
exclure les caracteres qu'on recherche du resultat final: ainsi par exemple quand je traite le nom "titre
- artsite" avec [-](.*) j'obtiens "- titre" et (.*)[-] j'obtiens "artiste -" ... évidemment je veux retirer "- " dans
le premier cas et " -" dans le second! d'avance grand merci si solution de votre part! Jean-claude
(c'est du sérieux: j'ai 3000 titres à traiter pour la playlist d'une radio!)
△ ▽ • Reply • Share ›

Lucas Willems Mod > Jean-claude Arragon • 3 years ago

Vous avez la bonne regex ! Il vous faut simplement récupérer le contenu qui se trouve entre
parenthèses. Pour ca, utilisez $1. En gros, dans Notepad, vous faites un remplacer sous :
Recherche : (.*)[-]
Remplacer par : $1
Normalement, ca devrait marcher.
△ ▽ • Reply • Share ›

Jean-claude Arragon > Lucas Willems • 3 years ago


Merci beaucoup Lucas d'avoir examiné ma situation, le souci c'est que je ne suis pas
sur notepad , je dois écrire le résultat sur une ligne de code dans le logiciel qui est
supposé implémenter les tags mp3 à partir du nom de fichier ... en attachement la
capture d'écran correspondante, pour plus de clarté! ... avec mon souci mis en
évidence le " -" et le "- " qui sont extraits.. en même temps que l'info utile recherchée !
(= le nom de l'artiste tout seul et le nom du titre tout seul) bien cordialement Jean-
claude


△ ▽ • Reply • Share ›

Show more replies

arnaud • 3 years ago


Bonjour,
Tout d'abord merci pour ce tutoriel qui permet d'avoir un nouvel espoir. Cependant, je n'y arrive pas
après avoir essayé différentes regex..
Je dois uniformiser les numéros de téléphones de 6 000 personnes. Le problème est que ces
personnes viennent de différents pays et que je dois uniformiser les numéros comme ceci :
00(indicatif tél)+numéro
Certain de ces numéros ont déjà le format demandé, d'autres ont : 033 1 85 14 65 47 ou encore 33 1
54 85 66 55
D'autre encore n'ont tout simplement rien : 01 45 58 54 58 ou 1 45 85 47 45

Auriez-vous une regex qui pourrai m'aider ? L'idéal serait que cette dernière trouve les mauvais
formats et qu'elle les modifient pour que le format soit correct.

Merci d'avance pour votre aide qui me sera très précieuse.


△ ▽ • Reply • Share ›
We use cookies to track usage and preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 16/20
Emmanuel Retgal > arnaud • 3 years ago
Emmanuel Retgal > arnaud • 3 years ago
6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)
@^(0|+33)[1-8]([-. ]?[0-9]{2}){4}$@
△ ▽ • Reply • Share ›

Lucas Willems Mod > arnaud • 3 years ago

Je n'ai pas beaucoup de temps pour vous répondre. Ce que je ferai : écrire une régex qui
sélectionne tous les numéros qui ont le bon format. Ces numéros là, vous pouvez les mettre de
côté, ils sont correctes. Puis ensuite, vous repérez les différents formats qui ne sont pas. Vous
écrivez une regex pour chacun d'eux afin de les sélectionner puis vous écrivez pour chacun
d'eux une régex les transformant du mauvais format vers le bon.
△ ▽ • Reply • Share ›

arnaud > Lucas Willems • 3 years ago


C'est pour mon entreprise, je suis stagiaire et je dois rendre ce boulot pour
demain/après demain max! Donc si tu as un peu de temps je ne dis pas non. Il y a un
ingénieur dans l'entreprise, je lui parlerai de ce que tu m'as dit. Mais n'hésite pas à
m'aider :)
Merci pour ta réponse rapide,
Arnaud
△ ▽ • Reply • Share ›

Show more replies

pytohs • 3 years ago


@Lucas Willems si possible j'aurai besoin de ton Skype pour parler Dév si tu voie ce que je veux
dire, et bien sure si cela ne te dérange pas,
△ ▽ • Reply • Share ›

pytohs • 3 years ago


apparament les Regex continuent de faire parler d'eux ... pour dire vrai c'est à force de s'exercer avec
qu'on finit par avoir le reflex des bonnes Regex comme motif
△ ▽ • Reply • Share ›

jaroc • 3 years ago


bonjour,
je me confronte aux regex avec NotePad++ et je m'avoue battu.
J'ai cherche relu pas mal de page web, y compris celle ci qui est claire, mais je n'ai pas trouvé
d'exemple pour changer plusieurs chaines de caractères comprises entre deux balises.
Mon cas plus spécifique
je cherche à utiliser regex sous notepad++ pour changer des commentaires dans un fichier CSS
ma ligne est par exemple :
" border: 1px solid red; /*testin*/ border: 1px solid transparent; /*testout*/ "

Je voudrais avec un regex éliminer (remplacer par rien) les /*testin*/ et /*testout*/
pour obtenir
" border: 1px solid red; border: 1px solid transparent; "
Quoi que je fait c'est toujours toute la chaine entre le premier /* et le dernier */ qui est prise.
Cet exemple est plus difficile car / et * sont des caractères qui implique \/ et \*
We use cookies to track usage and preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 17/20
merci
merci.
6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)
△ ▽ • Reply • Share ›

Lucas Willems Mod > jaroc • 3 years ago

Bonjour Jacques

Cette regex va te permettre de sélectionner tous les commentaires de ton fichier : /(\/\*.*?\*\/)/g
Voici une page donnant des explications : http://stackoverflow.com/qu...
Il te faut comprendre le "non-greedily" quand on ajoute un point d'interrogation.

En espérant que cette regex marche aussi chez toi !


△ ▽ • Reply • Share ›

jaroc > Lucas Willems • 3 years ago


hi,
merci pour cette réponse rapide.
Sur NotePad++ (v6.8.8) le regex à écrite devient : (\/\*)(.*?)(\*\/)
il n'y a pas besoin du g et chaque action doit être entre parenthèse.
sous regex101.com c'est bien ta syntaxe qui est acceptée.
ce regex me permet d’éliminer tous les commentaires de tous mes fichier CSS en un
clic

Merci


△ ▽ • Reply • Share ›

Show more replies

hammami Borhen • 3 years ago


Bonjour,
Merci bien, c'est un article très intéressant et ça m'aide beaucoup a comprendre. Et je veux poser une
question: Comment interdire les caractère accentué et les caractère spéciaux avant et après le "@" ?
exemple: too.foo@émul.com
Merci d'avance.
△ ▽ • Reply • Share ›

Lucas Willems Mod > hammami Borhen • 3 years ago


@pytohs a très bien répondu !! Mais je ne suis pas sur que l'on puisse mettre des caractères
accentués dans l'adresse mail...
△ ▽ • Reply • Share ›

pytohs > hammami Borhen • 3 years ago


ben écoute hammami Borhen tu pourrais tout simplement mettre ces caractere dont tu parle
dans une liste du genre [a-z0-9._-]+[^éàèô]+@[^éàèô]+[a-z0-9._-]\.[a-z]{2,4} et je pense que
cela pourrait t'aider.
△ ▽ We use•cookies
• Reply Share › to track usage and preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 18/20
6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)
hammami Borhen > pytohs • 3 years ago
Je vous remercie très bien, mais le problème persiste encore. j'ai essayé d'utiliser un
champ de type text au lieu du type email et je fait le contrôle en js.
△ ▽ • Reply • Share ›

Hacid Abdallah • 4 years ago


Bon article, pour la base, mais peut-on avoir un tuto pour les expressions plus complexes ?
△ ▽ • Reply • Share ›

pytohs • 4 years ago


très bon article félicitation Lucas, cela m'a encore permis d'approfondir mes connaissance sur ce
sujet, si tu le permet de répondre a @Mohamed Amine Ayed Mohamed Amine concernant le pattern
d email, je pense que ça ferait l'affaire :
regex=[a-z0-9._-]+@[a-z0-9._-]\.[a-z]{2,4}
il n'y a pas de majuscule puisqu'on en a pas besoin pour les email, et le nom de domaine comporte 2
à 4 lettres, soit .fr,.com .info etc...
△ ▽ • Reply • Share ›

Lucas Willems Mod > pytohs • 4 years ago


Merci beaucoup !
Une regex possible serait la suivante je pense : [a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}

Dans ta regex, tu as oublié le 2ème plus pour mettre plusieurs lettres après le @.
△ ▽ • Reply • Share ›

pytohs > Lucas Willems • 4 years ago


bah tu as raison , j'était un peu fatigué quand j'écrivais,pas remarqué ni testé, lol il était
3H du mat
Merci d'avoir corrigé
△ ▽ • Reply • Share ›

Gilles • 4 years ago


Bonjour,

Je rejoins d'autres lecteurs pour juger très didactique cette page, merci !
J'ai un souci dont je ne parviens pas à trouver la solution :

Si je veux remplacer des caractères, par exemple j'ai la chaine "125 -grt vleufb", je veux remplacer les
espaces après les chiffres par " - ". Je peux me servir des chiffres pour sélectionner les espaces
uniquement après des chiffres, avec "/d " et remplacer cet espace par " - ", les caractères que je veux
avoir. Mais je perds alors le chiffre, qui m'a servi à sélectionner cet espace !

Ma question : peut-on "citer" un caractère pour sélectionner une chaine de caractère et le remettre
dans la chaine remplacée ?

Par exemple au départ : "1982 l'album de tous les temps" -> "1982 - l'album de tous les temps"

Un peu spécifique ma question, mais ça fait plusieurs fois que je butte dessus, donc il doit bien y avoir
une solution... We
Je ne dois
use pas être
cookies toletrack
seul usage
! and preferences. I Understand ()
https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 19/20
6/14/2019 Tutoriel pour maîtriser les expressions régulières (regex)
Merci d'avance pour toute aide.
△ ▽ • Reply • Share ›

theta > Gilles • 2 years ago


yes tu peux, bon je sais que le post est très vieux, mais si jamais ça peut aider des futures
personnes:
si tu veux "enregistrer" un bout, il faut le mettre entre parenthèses, tu peux ensuite le récupérer
avec \1, \2, etc, le chiffre dépend du "numéro" de ton enregistrement par exemple là ton
exemple va donner (en langage Perl, je sais pas trop comment ça marche pour faire un
remplacement dans un autre langage, mais en tout cas, l'expression régulière est la meme
ainsi que la chaine de remplacement):

$chaine =~ s/(\d*) +/\1 - /;

(\d*) va enregistrer la suite de nombre et la mettre dans \1, ensuite " +" va prendre toute suite
d'espace
La partie qui vient ensuite est la chaine de remplacement: \1-

\1 correspond donc à ta suite de chiffres précédement enregistrée et - est le caractère de


remplacement pour ta suite d'espaces ;)
△ ▽ • Reply • Share ›

Réalisé par Lucas Willems (https://www.lucaswillems.com/fr/about)

We use cookies to track usage and preferences. I Understand ()


https://www.lucaswillems.com/fr/articles/25/tutoriel-pour-maitriser-les-expressions-regulieres 20/20