Aller au contenu

Visual Sudio Code et les expressions régulières

Petit pense-bête pour utiliser les expressions régulières sur Visual Sudio Code. C’est une fonctionnalité que j’utilise fréquemment, mais pas assez pour que je me souvienne des motifs quand j’en ai besoin.

Quel est le moteur d’expression régulière ?

Les expressions régulières pourront être au format ECMAScript 5 ou PCRE2.

Ouvrir le widget recherche/remplacement

Pour lancer une recherche, il suffit d’utiliser les touches [CTRL]+[F], qui ouvre ce widget :

visual studio code regex

Pour lancer une recherche avec remplacement il suffit d’utiliser les touches [CTRL]+[H], qui ouvre ce widget :

visual studio code code regex

Pour activer les regex, il faut cliquer sur .*

Saisir des expressions régulières

Je ne vais pas refaire le cours sur les expressions régulières perl, mais je vais prendre quelques pour piqûre de rappel. Vous pouvez vous entraîner avec le site regex101.com.

Pour rechercher un caractère dans un ensemble il suffit de le mettre entre []. Par exemple une lettre minuscule [a-z], une lettre minuscule ou majuscule [a-zA-Z], un nombre [0-9], etc. Vous pouvez ajouter d’autres caractères dans la liste.

| permet d’indiquer un ou : moi|toi|nous recherche les mots moi,toi,nous.

Les caractères spéciaux :

  • \n saut de ligne
  • \r retour chariot
  • \t tabulation
  • \f saut de page
  • \e échappement
  • ^ désigne le début d’une ligne
  • $ désigne la fin d’une ligne

Les raccourcis :

  • \w qui équivaut à [a-zA-Z0-9_]
  • \W à [^a-zA-Z0-9_] donc le contraire de \w
  • \s à [\r\n\t\f\v]
  • \S à tous les caractères autres que ceux de \s
  • \d à [0-9]
  • \D à tous les caractères non numériques. [^0-9]
  • . à n’importe quel caractère sauf retour à la ligne
  • \b recherche toutes les séquences \w dont la première ou/et la dernière lettre est la précédant.

Pour définir le nombre d’occurrences d’un caractère ou d’un ensemble :

  • ? à zéro ou une occurrence d’une recherche
  • + à une ou plus d’occurrence(s) d’une recherche.
  • * à zéro ou plus d’occurrence(s) d’une recherche.
  • {i,j} idem, mais on définit le nombre de répétitions mini et maxi.

La capture :

  • (...) permet de capturer le contenu afin de le réutiliser dans la zone remplacement avec le caractère $n. n’étant l’index de l’occurrence ().

Si vous recherchez un caractère parmi ceux qui sont réservés, il faudra les échapper avec \ : $^.|?*+()[]{}

Quelques exemples

1) Dans un playbook Ansible vous avez oublié d’entourer d’espaces le nom d’une variable.

“{{variable}}” doit s’écrire ”{{ variable }}”.

On doit ajouter des échappements puisque nous recherchons des {} :

  • Dans la zone recherche : \{\{(\w+)\}\}
  • Dans la zone remplacement : \{\{ $1 \}\}

2) Dans les descriptions de tâches, nous aimerions que la première lettre de celle-ci soit en Majuscule.

  • Dans la zone recherche : (\s+) - name: (\w+)
  • Dans la zone remplacement : $1 - name: \u$2

Dans la zone résultat, il suffit de précéder l’occurrence de la capture par \u. Pour mettre en minuscule \l. Pour le faire sur tout le mot \L ou \U.

Je compléterai ce billet avec d’autres exemples quand je les utiliserai.