Les expressions régulières, ou regex, sont des séquences de caractères qui forment un motif de recherche. C'est ce que l'on appelle également un pattern (schéma en anglais). Les expressions régulières sont très utiles pour détecter des pattern quelques part dans une chaîne de caractères.
Exemple avec les numéros de téléphone
Dans l'exemple suivant, nous avons 4 numéros de téléphone au format américain.
- Mais certains ont des parenthèses pour le premier bloc de 3 nombres mais pas tous.
- Après vous pouvez avoir un tiret, un point ou un espace comme séparateur
- Certains numéros sont en début de ligne et d'autres à la fin
- ... en clair, aucun n'est pareil et il n'est pas simple de tous les identifier 🤯😤
C'est dans ce domaine, qui semble complexe, que l'utilisation d'expressions régulières va être utile.
Comme vous pouvez le voir dans l'image suivante, nous avons été capable d'extraire tous les numéros de téléphones. Pourtant, ils sont tous différents et ne sont pas au même endroit dans la chaîne de caractères.
C'est là où l'utisation de pattern commun à toutes les cellules va nous être très utile.

Les caractères spéciaux et leur signification
Dans le monde de Windows, vous connaissez certainement les métacaractères étoile ( * ) et point-d'interrogation ( ? ). Ils peuvent être utilisés avec les fonctions NB.SI.ENS ou SOMME.SI.ENS. Avec les REGEX, c'est la même chose mais il y a plus de possibilités.
.
(point) : Correspond à n'importe quel caractère, sauf une nouvelle ligne.+
(plus) : Correspond à l'expression précédente trouvée une ou plusieurs fois.?
(point d'interrogation) : Correspond à l'expression précédente trouvée trouvé 0 ou 1 fois (utile pour les numéros de téléphone US)*
(étoile) : Correspond à l'expression précédente 0 ou plusieurs fois.$
(dollar) : Correspond à la fin d'une ligne.^
(accent circonflexe) : Correspond au début d'une ligne ou inverse le résultat d'une séquence spéciale (voir après)
L'utilité du symbole \
Le symbole \
(antislash) sert à rechercher un caractère spécial.
- Par exemple, pour rechercher un point (.) dans une chaîne texte, on écrira \. (utilisé dans l'extraction d'emails)
- Pour rechercher une parenthèse \(
- Un plus, \+
- Et ainsi de suite pour tous les caractères spéciaux
Les séquences spéciales \d \D \w \W \s \S
\d
: Correspond à n'importe quel chiffre (équivalent à [0-9]).\D
: Correspond à n'importe quel caractère qui n'est pas un chiffre (donc lettres et ponctuation)\w
: Correspond à n'importe quel caractère alphanumérique (équivalent à [a-z][A-Z][0-9] et le caractère underscore ( _ )).\W
: Correspond à n'importe quel caractère qui n'est pas alphanumérique.\s
: Correspond à n'importe quel espace blanc (espaces, tabulations, nouvelles lignes).\S
: Correspond à n'importe quel caractère qui n'est pas un espace blanc.
Les crochets [0-9][a-z][A-Z]
Les crochets servent à créer une liste de recherche.
[0-9]
: Correspond à n'importe quel chiffre.[1-9]
: Tous les chiffres sauf le 0[a-z]
: Correspond à n'importe quelle lettre minuscule.[A-Z]
: Correspond à n'importe quelle lettre majuscule.
Les accolades { } {2,} {2,5}
Les accolades servent à spécifier le nombre d'occurrences d'un pattern :
{n}
: Correspond exactement à n occurrences. Par exemple @{2} va chercher toutes les chaînes où le symbole @ a été trouvé 2 fois de suite.{n,}
: Correspond à au moins n occurrences. En fait, le symbole + est équivalent à {1,} (un ou plus éléments trouvés). C'est exactement la même astuce qui permet de faire des remplacements spéciaux dans Word depuis plus de 30 ans.{n,m}
: Correspond à au moins n occurrences mais pas plus de m. {2,5} (au moins 2 mais pas plus de 5)
Les parenthèses ( ) pour les groupes
Les parenthèses sont utilisées pour grouper des parties d'une expression régulière. Cela permet de capturer des sous-expressions pour une utilisation ultérieure ou d'appliquer des quantificateurs à l'ensemble du groupe.
(\d{2}\s)
=> groupe de 2 chiffres suivi d'un espace (pour la recherche de numéros de téléphone français)(\d{2}\s){3}
=>(\d{2}\s)
=> groupe de 2 chiffres suivi d'un espace qui se répète 3 fois
Précède ou Suit
Les assertions d'antériorité sont des types de lookbehind assertions :
(?<=)
: Assertion d'antériorité positive. Correspond à un motif qui est précédé par une certaine séquence.(?
: Assertion d'antériorité négative. Correspond à un motif qui n'est pas précédé par une certaine séquence.
Les assertions de suivi sont des types de lookahead assertions :
(?!)
: Assertion de suivi négative. Correspond à un motif qui n'est pas suivi par une certaine séquence.(?=)
: Assertion de suivi positive. Correspond à un motif qui est suivi par une certaine séquence.
Raccourcis
Double crochets requis ici.
[[:alnum:]]
: Double crochets requis ici. Correspond aux lettres et aux chiffres. Équivalent à [A-Za-z0-9].[[:alpha:]]
: Correspond aux lettres. Équivalent à [a-zA-Z].[[:ascii:]]
: Correspond à tout caractère dans la plage ASCII valide (tout caractère latin de base). Codes ASCII de 0 à 127 inclus.[[:blank:]]
: Correspond aux espaces et aux tabulations (mais pas aux sauts de ligne). Équivalent à [ \t].[[:cntrl:]]
: Correspond aux caractères utilisés pour contrôler la présentation du texte, y compris les sauts de ligne, les caractères nuls, les tabulations, et le caractère d'échappement.[[:digit:]]
: Correspond aux chiffres décimaux. Équivalent à [0-9] ou \d.[[:graph:]]
: Correspond aux caractères visibles (pas d'espace : caractères imprimables, non blancs, non de contrôle).[[:lower:]]
: Correspond aux lettres minuscules. Équivalent à [a-z].[[:print:]]
: Correspond aux caractères imprimables, faisant partie de l'ensemble latin de base, comme les lettres et les espaces, mais sans les caractères de contrôle.[[:punct:]]
: Correspond aux caractères de ponctuation visibles qui ne sont ni des espaces, ni des lettres, ni des chiffres.[[:space:]]
: Correspond aux caractères d'espacement. Équivalent à \s.[[:upper:]]
: Correspond aux lettres majuscules. Équivalent à [A-Z].[[:word:]]
: Correspond aux caractères de mot (lettres, chiffres et traits de soulignement). Équivalent à \w ou [a-zA-Z0-9_].[[:<:]]
: Correspond au début d'un mot.[[:>:]]
: Correspond à la fin d'un mot.(?:…)
: Correspond à tout ce qui est inclus. Par exemple, répéter 1 à 3 chiffres et un point 3 fois peut être identifié ainsi : /(?:\d{1,3}.){3}\d{1,3}/.(…)
: Capture tout ce qui est inclus.
Les expressions régulières sont des outils puissants pour manipuler et rechercher des textes. En comprenant ces symboles et leurs usages, vous pouvez effectuer des recherches et des modifications complexes de manière efficace.
Articles liés
- Le site regex101.com vous aide à tester vos patterns