Mémento expressions régulières

Sous Unix, grep, sed, et awk utilisent les expressions régulières. Tout comme d'ailleurs, la très grande majorité des langages de programmation ou des éditeurs texte.

Sur cette page
  1. Le point: .
  2. Crochets: [xyz]
  3. Crochets avec exclusion: [^xyz]
  4. Crochets avec plage: [a-z]
  5. Astérisque: *
  6. Symbole d'addition: +
  7. Point d'interrogation: ?
  8. Accolades: {}
  9. Parenthèses: ()
  10. Parenthèses sans capture: (?: )
  11. Parenthèses avec pipe: (abc|xyz)
  12. Caractère d'échappement: \
  13. Extraire une date de type AAAA-MM-JJ
  14. Extraire un titre de type markdown ou gemtext
  15. Extraire le domaine d'une adresse courriel

Motifs de base

Le point: .

Il permet de sélectionner n'importe quel caractère: lettres, chiffres, ponctuations, les espaces... tout.

  / . /g

ABCD 1234 !@#$


Crochets: [xyz]

Si on cherche une chaîne de caractères avec des lettres qui divergent, on utilise les crochets.

  / foi[sex] /g

fois, foie, foil, foix


Crochets avec exclusion: [^xyz]

Inversement, si je voulais plutôt exclure les mots commençant par foi mais ce terminant pas s, e ou x, j'utliserais l'accent circonflexe comme premier caractère suivant le crochet de gauche.

  / foi[^sex] /g

fois, foie, foil, foix


Crochets avec plage: [a-z]

Pour capturer une séquence de caractères dans une chaîne on utilise le trait d'union (range expression).

Cette expression tient compte de la casse.

  / [m-q] /g

abcdefghijklmnopqrstuvwxyz

C'est idem avec les chiffres...

  / [5-7] /g

01234567899876543210


Astérisque: *

Le caractère précédent l'astérisque peut être absent ou présent de multiple fois.

  / cré* /g

crevées créées


Symbole d'addition: +

Dans ce cas-ci, nous voulons indiquer que le caractère précédent le + est présent une fois ou possiblement plus.

  / cré+ /g

crevées créées


Point d'interrogation: ?

Un caractère est rendu facultatif s'il est suivi par un point d'interrogation.

  / Cou?lombe /g

Coulombe ou Colombe


Accolades: {}

Préciser par n le nombre de fois qu'un caractère peut être répété.

  / Bo{3}uh /g

Booouh Booooouh!

On peut aussi définir un nombre minimal de répétition en ajoutant une virgule à la suite de n.

  / Bo{3,}uh /g

Booouh Booooouh!

Pour déterminer une fourchette, il suffit d'ajouter, suivant la virgule, une valeur qui correspond à la limite recherchée.

  / Bo{1,3}uh /g

Bouh Boouh Booouh Booooouh!


Parenthèses: ()

Les parenthèses sont utilisées pour grouper des expressions.

  / (blabla) /g

Bla, bla, blabla, blabla...

Un groupe peut être référencé par une barre oblique inversé suivie d'un chiffre: \n.

  / (bla) \1, (blabla), \2 /g

Ici deux groupes se retrouvent référencés...

bla bla, blabla, blabla

Parenthèses sans capture: (?: )

Ignorer un groupe parmis d'autres.

  / (?:bla) (blabla) \1 /g

bla bla blabla blabla

Parenthèses avec pipe: (abc|xyz)

Choisir par alternance parmi plusieurs expressions.

  / (châ|ra|gâ)teau|camion /g

Au château il glace le gâteau à l'aide d'un rateau... Et au loin, un camion.

Caractère d'échappement: \

Pour inclure des caractères qui sont d'abord réservés à la conception aux expressions régulières il faut les précéder du caractère d'échappement.

  / (\*|\.) /g

Sélectionner un astérisque* et trois points...


Quelques exemples pouvant être utiles

Extraire une date de type AAAA-MM-JJ

Ici nous avons trois fichiers classés du plus récent au moins récent et nous voulons extraire les dates qui se trouvent au début des noms...

  / ([0-9]{4})(-)([0-9]{2})(-)([0-9]{2}) /g
  1. 2024-03-12-nam-euismod-tellus-id-erat.md
  2. 2024-02-21-sed-id-ligula-quis-est-convallis-tempor.md
  3. 2024-01-05-Mauris-ac-felis-vel-velit-tristique-imperdiet.md

Extraire un titre de type markdown ou gemtext

Récupérer les titres sans les caractères # et l'espace précédant le premier mot.

  / [^#{1,6}\s].+ /g

# Nullam eu ante vel est convallis dignissim
## Aliquam erat volutpat
### Cras placerat accumsan nulla

Extraire le domaine d'une adresse courriel

  / (?<=@)(.*)$ /g

Vous pouvez me joindre à l'adresse suivante: hs0ucy@soucy.cc.