Image
expressions régulières - Blog Eurelis
26/01 2010
Thème
Technologie

Expressions Régulières

Paragraphe

Texte

Ce qu'il faut savoir pour s'en sortir...

Titre
Définition

Texte

C'est une chaîne de caractères qui permet de décrire un modèle (ou pattern) de chaîne de caractères. Ce modèle est décrit à l'aide d'opérateurs, de valeurs et de variables. Des options sont disponibles pour simplifier l'écriture de la REGEX.

Titre
Intérêt

Texte

MATCH : A vérifier qu'une chaîne de caractères vérifie un pattern donné : la REGEX (Est-ce que ma chaîne commence / finit par … , contient / ne contient pas …, correspond à une adresse e-mail / web … ?)
EXTRACT : A extraire une partie d'une chaîne de caractère : un groupe (Je veux les paramètres param1 et param3 de l'URL … parser une page web …)
SUBSTITUTE : A remplacer une partie d'une chaîne de caractères par une autre (Modifier massivement le format d'un fichier CSV, SQL … Transformer un CSV en SQL…)

Titre
Syntaxe

Texte

Caractères simples :

  • x satisait le caractère x
  • \t satisait le caractère « tabulation »
  • \n satisait le caractère « nouvelle ligne »
  • \r satisait le caractère « retour charriot »

 
Caractères de limite :

  • ^ caractérise le début de la ligne quand il est au début de l'expression régulière
  • $ caractérise la fin de la ligne quand il est à la fin de l'expression régulière
  • \b caractérise une coupure de mot (des caractères au début ou à la fin d'un mot)
  • \beur satisfait eurelis mais pas agitateur(mot qui commence par eur)
  • eur\b satisfait agitateur mais pas eurelis(mot qui finit par eur)
  • \B caractérise les caractères à l'intérieur d'un mot (ni au début, ni à la fin)
  • \Bi satisfait git et ci (mot qui ne commence pas par i)
  • i\B satisfait git mais pas ci (mot qui ne finit pas par i)

 
Classes de caractères :

Classes simples

  • [abc] satisfait a, b ou c. Equivalent à a|b|c

Négation

  • [^abc] satisfait tout sauf a, b ou c

Intervalle

  • [a-z] satisfait tous les caractères de a à z
  • [A-Z0-9] satisfait tous les caractères de A à Z et de 0 à 9

Union

  • [a-d[c-p]] est l'équivalent de [a-p]

Intersection

  • [b-p&&[a-d]] est l'équivalent de [b-d]

Soustraction

  • [a-z&&[^bc]] est l'équivalent de [ad-z]
  • [a-z&&[^m-p]] est l'équivalent de [a-lq-z]

Classes abrégées :

  • . satisfait tous les caractères
  • \d est un chiffre ("digit"). Equivalent à [0-9]
  • \D est un non-numérique. Equivalent à [^0-9] ou [^\d]
  • \s est un espacement ("whitespace"). Equivalent à [ \t\n\f\r]
  • \S est un non-espacement. Equivalent à [^\s]
  • \w est un alphanumérique ("word"). Equivalent à [a-zA-Z_0-9]
  • \W est un non-alphanumérique. Equivalent à [^\w]

 
Opérateurs logiques :

  • XY satisfait le caractère X suivi du caractère Y
  • X|Y satisfait le caractère X ou le caractère Y
  • (?:X) satisfait une chaîne contenant X (sans capturer X)
  • X(?!Y) satisfait une chaîne contenant X non-suivi de Y (sans capturer Y)

 
Groupes :
Un groupe permet de définir un sous-motif dans une expression régulière.

  • capturer le caractère X :(X)
  • récupérer le nième groupe capturé en référence arrière (dans la regex): \n
  • récupérer le nième groupe capturé en substitution (hors de la regex): $n

Conseil : toujours suivre l'ordre des parenthèses ouvrantes
 
Drapeaux :
Les drapeaux sont les options de l'expression régulière.

  • c : au cas où une erreur survient, ne pas réinitialiser la position de la recherche
  • g : rechercher globalement, c'est-à-dire trouver toutes les occurrences
  • i : ignorer la casse
  • m : multiple lines, la chaîne de caractères peut comporter plusieurs lignes
  • o : once, n'appliquer le modèle de recherche qu'une seule fois
  • s : single line, considérer la chaîne de caractères comme une ligne distincte
  • x : extended, utiliser la syntaxe étendue

 
Quantificateurs :
Quantificateurs gourmands ou avides (greedy) : cherchent le nombre maximal de répétitions qui autorisent le succès de la recherche.

  • X? satisfait le caractère X, 0 ou 1 fois
  • X* satisfait le caractère X, 0 ou plusieurs fois
  • X+ satisfait le caractère X, 1 ou plusieurs fois. Equivalent à XX*
  • X{n} satisfait le caractère X, exactement n fois
  • X{n,} satisfait le caractère X, au moins n fois
  • X{n,p} satisfait le caractère X, au moins n fois, mais pas plus de p fois

Quantificateurs réticents ou paresseux (reluctant) : cherchent le nombre minimal de répétitions qui autorisent le succès de la recherche

  • C'est l'exacte même syntaxe que les quantificateurs « gourmands » à laquelle on ajoute ?

Quantificateurs possessifs (possessive): cherchent le nombre maximal de répétition mais sans assurer le succès de la recherche (sans regarder si la suite de l'expression est satisfaite dans la chaîne)

  • C'est l'exacte même syntaxe que les quantificateurs « gourmands » à laquelle on ajoute +

Titre
Exemples à réutiliser

Texte

Code Postal en France

  • \b[0-9]{5}\b

Numéro de téléphone en France

  • \b0[1-689]([-. ]?\d{2}){4}\b

Adresse E-mail

  • \b[\w.%+-]+@[a-zA-Z\d.-]+\.[A-Za-z]{2,4}\b

URL

  • \b[a-zA-Z\d]+://(\w+:\w+@)?([a-zA-Z\d.-]+\.[A-Za-z]{2,4})(:\d+)?(/.*)?\b

Adresse IP v4

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

Titre
Conclusion

Texte

Une bonne expression régulière est une expression régulière:
Concise : Ecrire le strict minimum pour que cette expression régulière soit nécessaire et suffisante.
Claire : Être capable de comprendre facilement cette expression régulière, même en la regardant longtemps après.
Qui correspond précisément au besoin : Bien définir le besoin (les règles), pas d'erreur possible en fonction de différentes chaînes de caractères en entrée.

Titre
Bibliographie

Texte

Test en ligne d'expressions régulières :

  • http://www.fileformat.info/tool/regex.htm
  • http://tools.ap2cu.com/regex

Cours et exemples d'expressions régulières :

  • http://www.regular-expressions.info

Expressions régulières avancées :

  • http://benhur.teluq.uqam.ca/SPIP/inf6104/article.php3?id_article=95&id_rubrique=6&sem=Semaine%204

Expression régulières en Java :

  • http://java.sun.com/javase/7/docs/api/java/util/regex/Pattern.html

Expressions régulières en PHP :

  • http://www.php.net/manual/fr/reference.pcre.pattern.syntax.php

Expressions régulières en Perl :

  • http://sylvain.lhullier.org/publications/intro_perl/chapitre10.html
  • http://www.univ-orleans.fr/webada/html/selfhtml_fr/cgiperl/langage/expresreg.htm

Expressions régulières en Javascript :

  • http://www.javascriptkit.com/javatutors/redev.shtml

Expressions Régulières sous vi :

  • http://www.softpanorama.org/Editors/Vimorama/vim_regular_expressions.shtml
Auteur
By Antoine
Haut