Syntaxe des expressions régulières
Cet article présente les différentes syntaxes d’expressions régulières. Ce n’est pas une introduction ou un tutoriel, il en existe déjà de très bons sur le web [1], ainsi que des outils en ligne pour les tester [2]. Les expressions régulières sont un outil indispensable pour les développeurs et autres administrateurs système.
Comme d’habitude en informatique, il existe plusieurs syntaxes pour les déclarer : BRE, ERE, PCRE et
celles de Vim. Les deux premières sont définies dans la norme POSIX et sont étendues par plusieurs
programmes du projet GNU. Ces extensions offrent l’avantage d’homogénéiser ces deux variantes. Les
PCRE sont plus riches et plus puissantes. Quant à Vim, il utilise pas moins de 4 syntaxes
différentes (\v
very magic, \m
magic, \M
nomagic, \V
very nomagic).
La différence principale entre ces variantes est que le backslash est utilisé tantôt pour activer la signification spéciale d’un méta caractère, tantôt pour la désactiver.
Voici les syntaxes utilisées par différents outils :
sed
utilise BRE ou ERE (sed -r
)grep
utilise BRE, ERE (grep -E
ouegrep
) ou PCRE (grep -P
).ack
utilise PCRE- Les principaux langages de programmation utilisent PCRE
Fort heureusement, certains concepts ne dépendent pas de la syntaxe.
BRE | ERE | PCRE | \v | \m | \M | \V | ||||
+ | + | + | + | + | \+ | \+ | \+ | |||
? | ? | ? | ? | ? | \? | \? | \? | |||
expression intervalle | \{n,m\} | {n,m} | {n,m} | {n,m} | \{n,m} | \{n,m} | \{n,m} | |||
groupe et capture | \(\) | () | () | () | \(\) | \(\) | \(\) | |||
références arrières | \n | \n | \n | \n | \n | \n | \n | |||
alternation | | | | | | | | | ||||||
capture de mot | \<\> | \<\> | \b | <> | \<\> | \<\> | \<\> | |||
positive lookahead | (?=…) | @= | \@= | \@= | \@= | |||||
negative lookahead | (?!…) | @! | \@! | \@! | \@! | |||||
positive lookbehind | (?<=…) | @<= | \@<= | \@<= | \@<= | |||||
negative lookbehind | (?<!…) | @<! | \@<! | \@<! | \@<! |
En rouge, les extensions GNU à la norme POSIX
Conclusion
Je vous conseille d’utiliser au maximum une syntaxe proche de Perl car c’est la plus puissante. Avec Vim, utiliser le mode very magic en utilisant ce mapping.
nnoremap / /\v
Utiliser aussi sed -r
car la syntaxe ERE est plus proche de PCRE que BRE. Enfin, remplacer grep
par ack
qui utilise la syntaxe de Perl.
Liens utiles
[2] regex101.com