|
Expressions Régulières Publication : 26 janvier 2010 Ce qu'il faut savoir pour s'en sortir... |
|
Définition : 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.
Intérêt :
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…)
Syntaxe :
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)\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 :
[abc] satisfait a, b ou c. Equivalent à a|b|c[^abc] satisfait tout sauf a, b ou c[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[a-d[c-p]] est l'équivalent de [a-p][b-p&&[a-d]] est l'équivalent de [b-d][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 YX|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.
(X)\n$nConseil: toujours suivre l'ordre des parenthèses ouvrantes
Drapeaux :
Les drapeaux sont les options de l'expression régulière.
Quantificateurs :
X? satisfait le caractère X, 0 ou 1 foisX* satisfait le caractère X, 0 ou plusieurs foisX+ satisfait le caractère X, 1 ou plusieurs fois. Equivalent à XX*X{n} satisfait le caractère X, exactement n foisX{n,} satisfait le caractère X, au moins n foisX{n,p} satisfait le caractère X, au moins n fois, mais pas plus de p fois
Exemples à réutiliser :
\b[0-9]{5}\b\b0[1-689]([-. ]?\d{2}){4}\b\b[\w.%+-]+@[a-zA-Z\d.-]+\.[A-Za-z]{2,4}\b\b[a-zA-Z\d]+://(\w+:\w+@)?([a-zA-Z\d.-]+\.[A-Za-z]{2,4})(:\d+)?(/.*)?\b\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
Conclusion :
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.
Bibliographie :
Antoine