Nous allons aborder les différentes règles de bases qui permettent de construire des expressions régulières.
Remarque : cette page est assez longue et contient beaucoup d'informations que je n'ai pas pu regrouper en plus petites parties.
Les caractères ordinaires sont tous les caractères imprimables et non imprimables qui ne sont pas explicitement désignés comme des métacaractères :
La prise en compte des caractères accentués dépend de l'implémentation réalisée par le système. Généralement sous Windows les caractères accentués ne sont pas considérés comme des caractères alphabétiques.
La forme la plus simple d'une expression régulière est un seul
caractère ordinaire qui correspond à lui-même dans une chaîne
examinée.
Par exemple, un modèle comportant un seul
caractère, comme e, correspond
à la lettre e, où qu'elle apparaisse dans la chaîne, et
quelque soit le nombre de fois où elle apparait.
N'hésitez pas à modifier les expressions régulières des exemples pour voir le résultat de leur interprétation.
L'exemple précédent présente deux particularités :
Les caractères qui font partie de la syntaxe des expressions régulières doivent être protégés par un backslash. Le tableau ci-dessous en fait la liste (nous verrons la signification détaillée de ces caractères dans les paragraphes suivants).
| . | point | [ | crochet ouvrant |
| \ | backslash | | | barre verticale (pipe) |
| ^ | chapeau | ( | parenthèse ouvrante |
| $ | dollar | ) | parenthèse fermante |
| ? | point d'interrogation | * | étoile |
| + | plus | { | accolade ouvrante |
L'opérateur ou permet de rechercher un
caractère ou un autre. Il est défini par le signe |.
Par exemple pour
rechercher les e ou les n, on aura l'expression /e|n/
L'opérateur ou est bien utile quand les choix sont peu nombreux (2 ou 3 possibilités différentes), mais quand le choix est étendu, il est plus simple d'utiliser une énumération.
Une énumeration de caractères est faite en utilisant les crochets [ et ] qui entourent les caractères énumérés. On défini ainsi une classe de caractères.
Par exemple pour rechercher toutes les voyelles, on aura l'expression régulière /[aeiou]/
Les crochets permettent de définir des classes de caractères recherchés, mais également des classes de caractères exclus. Il suffit de faire précéder la liste des caractères par le signe ^.
Si on prend l'expression qui permet d'obtenir toutes les voyelles :
Pour rechercher toutes les lettres de l'alphabet, nous pouvons
utiliser l'expression régulière :
/[abcdefghijklmnopqrstuvwxyz]/
Plusieurs inconvénients : c'est long à écrire, sujet à erreur car on
peut facilement oublier une lettre ou la doubler, pas facile à lire,
carrément pénible si on veut ajouter les caractères en minuscules,
etc.
La notation suivante permet de définir des listes : deux caractères séparés par le signe moins (-), le tout entouré par les crochets [ et ].
Par exemple :
/[a-z]/
recherche la présence d'au moins un caractère alphabétique en
minuscule.
/[A-Z]/
recherche la présence d'au moins un caractère alphabétique en
majuscule.
/[a-zA-Z]/
recherche la présence d'au moins un caractère alphabétique en
minuscule ou en majuscule.
/[0-9]/
recherche la présence d'au moins un caractère numérique.
Bien sûr l'opérateur de négation ^ est utilisable.
Pour faciliter encore plus notre travail, il existe des classes prédéfinies de caractères, qui nous évitent de créer des ensembles connus et souvent utilisés. Certaines classes sont issues du standard POSIX, et sont reprises à l'identique dans les expressions régulières PCRE qui ajoutent aussi d'autres classes.
La prise en compte des caractères accentués dans les classes dépend de l'implémentation réalisée par le système. Généralement sous Windows les caractères accentués ne sont pas considérés comme des caractères alphabétiques.
| [[:alnum:]] |
Tous les caractères alphanumériques, minuscules et majuscules |
| [[:alpha:]] |
Tous les caractères alphabétiques, minuscules et majuscules |
| [[:ascii:]] |
Tous les caractères ascii de 0 à 127 |
| [[:blank:]] |
Tous les caractères "blancs" : espaces ou tabulations |
| [[:cntrl:]] |
Tous les caractères de contrôle |
| [[:digit]] |
Tous les chiffres |
| [[:lower:]] |
Tous les caractères en minuscules |
| [[:print:]] |
Tous les caractères imprimables (les caractères de contrôle exclus) |
| [[:punct:]] |
Tous les caractères de ponctuation |
| [[:space:]] |
Tous les caractères d'espacement (espaces, tabulations, saut de ligne, retour chariot) |
| [[:upper:]] |
Tous les caractères en majuscules |
| [[:word:]] |
Une lettre (majuscule ou minuscule), un chiffre (0 à 9) ou le caractère _ (underscore) |
| [[:xdigit:]] |
Tous les caractères en hexadecimal |
| \d |
Tous les chiffres |
| \D |
Tous les caractères non numériques (inverse de \d) |
| \s | Tous les caractères d'espacement (espaces, tabulations, saut de ligne, retour chariot) |
| \S |
Tout les caractères autre que d'espacement (inverse \s) |
| \w |
Une lettre (majuscule ou minuscule), un chiffre (0 à 9) ou le caractère _ (underscore) |
| \W |
Pas une lettre, ni un chiffre, ni _ (inverse de \w) |
Dans les exemples précédents nous avons utilisé la forme la plus simple d'une expression : la recherche d'un seul caractère dans une chaîne. Pour rechercher une chaîne précise dans une autre, il suffit d'écrire cette chaîne telle quelle. Par exemple l'expression régulière /une/ permettra de rechercher la chaîne de caractères une.
Le métacaractère point (.) sert de joker pour remplacer n'importe quel caractère : alphabétique, numérique, espace, ponctuation, etc.
Le caractères backslash (\) a plusieurs rôles.
Il peut servir de caractère d'échappement pour les caractères non alphanumériques qui ont une signification spéciale (*, [, (), {, \, +, ?, |, ^, $).
Un second usage du backslash (\) permet d'atteindre des caractères
non imprimables :
\a :
émission d'un son (hexa 07)
\cx
: control-x, où x est n'importe quel caractère
\e : echappement (escape) (hexa 1B)
\f : saut de page (formfeed) (hexa 0C)
\n : saut de ligne (newline) (hexa 0A)
\r : entrée (carriage return) (hexa 0D)
\t : tabulation (hexa 09)
\ddd : octal ou ddd est le code
\xhh : hexadécimal ou hh est la code
Le troisème usage du backslash (\) permet de spécifier des types de
caractères génériques :
\d :
un chiffre (0 à 9)
\D :
n'importe quel caractère qui n'est pas un chiffre
\s : n'importe quel type d'espacement :
tabulation, saut de ligne, saut de page, entrée et espace
\S : n'importe quel caractère qui n'est
pas un espacement
\w :
n'importe quel caractère de "mot" : une lettre (majuscule ou
minuscule, caractères accentués compris), un chiffre (0 à 9) ou le
caractère _ (underscore)
\W :
n'importe quel caractère qui n'est pas un caractère de "mot"
Le quatrième usage du backslash (\) sert pour les assertions simples
:
\b : correspond à un début
ou une fin de "mot"
\B :
inverse de \b
\A : correspond
au début de la chaîne examinée. C'est l'équivalent du métacaractère
^, sauf si l'option m est utilisée, auquel cas ^est le début de
chaque ligne trouvée dans la chaîne, et \A le début original de la
chaîne.
\Z : correspond à la
fin de la chaîne examinée. C'est l'équivalent du métacaractère $,
avec le même comportement que \A.