Regex

De Vim-fr


Une des grandes forces de vim est son puissant moteur d'Expressions Regulières (aussi connues sous le nom de regex). Les regex sont un moyen de définir, de manière courte, des ensembles de chaînes de caractères. Elles sont très utiles pour remplacer du texte, et s'utilisent donc naturellement beaucoup avec la commande :s ( 's' ou "subtitute" ) de Vim.

Exemples de regex

Exemple avec *

Un exemple de regex est : Bo*njour qui correspond aux chaînes de caractères : Bjour, Bonjour, Boonjour, Booonjour et ainsi de suite.

Explication : le * dans une regex signifie que le caractère précédent peut être répété autant de fois que l'on veut, ou ne pas être présent.

Exemple avec []

Un exemple pratique dans Vim cette fois, supposons que vous ayez écrit par erreur le texte suivant (l'exemple est idiot: je n'ai pas d'imagination) : Banjour à tous. Bonjour à toutes.

et que vous souhaitiez remplacer et Bonjour et Banjour par Bienvenue. L'expression régulière suivante vous sera alors utile : B[ao]njour.

Les crochets [] signifient que chacun des caractères entre ceux-ci peuvent-être utilisés. L'expression régulière représente donc Bonjour et Banjour.

Placez maintenant l'expression régulière dans la commande de remplacement de Vim :s, ce qui donne :s/B[ao]jour/Bienvenue/g.

Le texte devient maintenant : Bienvenue à tous. Bienvenue à toutes.

Syntaxe des regex

Remarque: pour éviter que l'un des caractères suivants ne soit interprété, il suffit de le faire précéder par un '\' ("backslash").

Liste des caractères spéciaux

Signe Signification
. N'importe quel caractère
^ Premier caractère qui n'est pas un espace de la ligne
0 Premier caractère de la ligne
$ Dernier caractère de la ligne

Les quantifieurs

Signe Signification
+ Le caractère est présent au moins une fois
* Le caractère est présent 0 ou plusieurs fois
\{n\} Le caractère est présent exactement n fois
\{n,m\} Le caractère est présent entre n et m fois


Exemples de substitution

Texte Formule Résultat
Bonjour :s/.// onjour
Bonjour :s/.*//
Booooooooooooonjour :s/o*/o/ Bonjour