Les expressions régulières Flashcards
En quoi consistent les expressions régulières?
Une expression rationnelle, ou expression régulière (traduction de l’anglais regular expression), est, en informatique, une chaîne de caractères que l’on appelle parfois motif (ou pattern), laquelle décrit un ensemble de chaînes de caractères possibles selon une syntaxe précise.
Quand envisager une expression régulière ?
Il est possible d’envisager une recherche par expression régulière lorsque vous recherchez une structure « type ». Il est relativement facile de créer une expression trouvant des adresses emails, des URL de sites, des numéros de cartes bancaires. Il est très difficile, voire impossible, d’en créer une trouvant les trois à la fois. Attendez vous également à de nombreux « faux positifs ».
Comment trouver un caractère générique?
. (point)
Ce caractère, en utilisation générale, remplace n’importe quel caractère (lettres, chiffres, espace, tabulation etc.) sauf les codes caractères matérialisant une fin de ligne (saut de ligne).
Ex: c.r peut trouver car, cor, cir, cur, cbr, ccr, c2r et…
Comment trouver des lettres?
les lettres [a-zA-Z]
Indique la présence, à cet emplacement, d’un caractère alphabétique dans l’intervalle allant de a à z. L’utilisation des majuscules permet de prendre en compte la casse des caractères. La classe peut être partielle
[b-d]une lettre dans l’intervalle de b à d
[t-w] une lettre dans l’intervalle de t à w
Comment trouver des chiffres?
Les chiffres [0-9]
Indique la présence, à cet emplacement, d’un caractère numérique dans l’intervalle de 0 à 9. La classe peut être partielle
[0-3] un chiffre dans l’intervalle de 0 à 3
[6-9] un chiffre dans l’intervalle de 6 à 9
Dans quel cas les interprétations se font de manière littérale?
Dans une classe de caractères, hors emplacement indiquant une fonction, les caractères sont interprétés de façon littérale.
Ex: [a-z^\0-9] Indique qu’à cet emplacement le caractère doit être une lettre de a à z ou un chiffre de 0 à 9 ou un ^ ou un \
Ex:[^a-z^\0-9] Indique qu’à cet emplacement le caractère ne doit pas être une lettre de a à z, ni un ^, un \ ou un chiffre de 0 à 9
Comment donner le choix entre plusieurs caractères à un emplacement?
Si les crochets indiquent généralement une classe de caractères « large », ils permettent également de laisser un choix fermé sur les caractères devant être présents à un emplacement donné. Pour ce faire, il suffit de ne pas indiquer d’intervalle via un « - ».
Ex: c[ao]r, entre le c et le r le caractère doit être un a, ou un o • Trouve car, cor et c’est tout Les caractères sont désignés par un OU, ici OU a OU o.
Comment se matérialise une exclusion?
Le fait de préfixer la classe indiquée dans les crochets du symbole ^ (accent circonflexe) indique que les caractères correspondants NE DOIVENT PAS être présents.
Ex : c[^aeo]r Trouve : cbr, cdr, cur, cwr, bref n’importe quel mot de 3 caractères commençant par c, finissant par r et dont le caractère central N’EST NI a, NI e, NI o.
Quelles sont les regex matérialisant la répétition?
?
Ce caractère a pour but de rendre facultatif le caractère qui le précède (le caractère précédent est présent 0 ou 1 fois).
Ex: cas? Trouve cas et ca
+
Indique que le caractère qui précède, peut être présent de 1 fois (minimum) à un nombre infini de fois.
Ex: car+ Trouve : car, carr, carrr, carrrr, carrrrr, etc..
*
Indique que le caractère qui précède peut être présent de 0 à un nombre infini de fois.
Ex: car* Trouve : ca, car, carr, carrr, carrrr, carrrrr, etc..
{min, max}
Indique que le caractère qui précède doit être présent de min à max fois.
Ex: hotmail.[a-z]{2,3} Trouve (entre autres) : hotmail.fr, hotmail.com, hotmail.xxx
Si les accolades ne contiennent qu’une valeur, le caractère ne sera répété que ce nombre précis de fois hotmail.[a-z]{2} trouve hotmail.fr, hotmail.be, etc…
Comment rechercher un caractère littéralement?
\
Que se passe-t-il si à un emplacement de mon expression, je désire chercher un point, un ?, un \ Ces caractères comme vu précédemment ont un comportement particulier dans le cas d’une expression régulière et je ne veux pas que hotmail.fr me trouve hotmail@fr par exemple. Il suffit de précéder le caractère spécial d’un \ pour indiquer que le caractère suivant doit être pris au sens littéral. Hotmail.fr indique qu’à cet emplacement doit être présent un point.
Comment matérialiser la constitution d’un groupe de caractères ou de mots?
( )
Les parenthèses permettent également de définir un ensemble de lettres, de mots. Leur utilisation peut par exemple permettre de donner le choix entre deux mots pouvant être présents dans une phrase, ou de chercher des mots dont l’orthographe est inconnue. Elles permettent également de désigner des groupes de mots ou de caractères pouvant ultérieurement être manipulés pour changer l’agencement d’un texte, supprimer, remplacer.
Comment exprimer le choix?
Le | ou « pipe » en anglais sert d’opérateur OU et indique un choix, une option. Un choix entre plusieurs caractères peut être géré par une classe fermée c[ao]r pour car et cor. Que se passe t-il lorsque le choix ou le doute porte sur plusieurs caractères voire un mot complet.
Ex rechercher thomas et tomas
Le plus simple : th?omas (le h est optionnel)
Par choix : (t|th)omas ou (to|tho)mas ou même (tomas|thomas)
Regardez l’utilisation des parenthèses destinées à délimiter la lettre ou l’ensemble de lettres auxquel est destiné le caractère spécial.
Quels sont les regex marquant le positionnement?
L’accent circonflexe déjà connu pour son rôle dans la négation d’une classe de caractère, bénéficie d’un autre rôle important. Lorsqu’il est placé au début d’une expression régulière. A cet emplacement, il impose que la chaine recherchée soit impérativement en début de ligne.
Ex: ^bonjour Trouve bonjour dans « bonjour madame » (sous entendu au début d’une ligne) Ne trouve pas « je vous donne le bonjour » (pas au début d’une ligne).
$
$ est le pendant de ^. Son rôle est d’imposer que l’expression régulière soit trouvée à la fin d’une ligne. Ex: bonjour$ Ne trouve pas bonjour dans « bonjour madame » (sous entendu au début d’une ligne) Trouve « je vous donne le bonjour » (sous entendu à la fin d’une ligne).
Comment créer des variables?
Les parenthèses ( ) permettent de déclarer des
« variables » au moteur gérant les expressions. Leur utilisation indique que des fragments particuliers de la chaîne recherchée doivent être « marqués » pour être déplacés, enlevés. Prenons l’exemple d’une date au format jour/mois/année
Ex: 21/07/2015 Que nous voulons transformer au format année/mois/jour Il suffit de localiser les éléments à permuter en les mettant entre parenthèses
Ex: (21)/(07)/(2015)
Ex: (21)/(07)/(2016) 1 2 3 Chaque élément entre parenthèse se voit attribuer un numéro de variable dans l’ordre d’apparition sur la ligne. Ce numéro, lorsqu’il est appelé, permet de permuter les éléments. Le rappel s’effectue au moyen de \ et du numéro de la variable correspondante.
Ex: \3\2\1 Résultat: 20160721 Ex: \3\2 Résultat: 201607 (on retire le jour)
Les parenthèses ont 2 rôles principaux Délimiteurs : servent à regrouper des éléments dans l’expression ce qui aide parfois pour structurer l’ensemble et éviter la confusion ;-) • Ex : délimi(ter|teur) Déclaration de variables : On nomme explicitement les différents éléments d’une expression dans l’intention de manipuler les chaînes qu’elle va trouver.
Quels sont les caractères étendus?
\w et \W
\w correspond à la classe dite « mot »
[a-zA-Z0-9(+ les caractères accentués)] bref les caractères entrant généralement dans la composition d’un mot.
\W inverse la classe il agit comme
[^a-zA-Z0-9(+ les caractères accentués)]
\d et \D \d correspond à la classe numérique Il est équivalent à [0-9] \D inverse la classe Il est équivalent à [^0-9]
\s et \S
Indique un caractère de type « espace » au sens large (espace, tabulation, saut de ligne ou un caractère non imprimable)
Le \S inverse la classe
Il est équivalent à \f\n\r\t
\f : saut de page \n : saut de ligne
\r : retour charriot \t : tabulation
\b \B
\b
Sélectionne un mot ayant une extrémité exemple : \bbonjour Valide : re bonjour Ne valide pas : rebonjour
\B
Sélectionne un mot seulement s’il n’a pas d’extrémité exemple : \Bbonjour Ne valide pas : re bonjour Valide : rebonjour