Regular expression
Tutorial du 1 mars 2005 - Aurélien Jarno
I - Significations des métacaractères :

    * \ sert à protéger un caractère, au cas où il aurait une autre interprétation possible.
      Comme en C, il précède les caractères n, t, ... pour désigner la fin de ligne (\n), une tabulation (\t), etc ..

    * [ ] sert à désigner un ensemble de caractères à reconnaitre:
          o [fa]oo par exemple recherche les chaines formées par f, ou a, suivi de "oo", soit foo ou bien aoo
          o [a-z] représente l'ensemble des lettres minuscules
          o [0-9] représente l'ensemble des chiffres
          o [^O] le symbole ^ négative l'expression. Donc ici on cherche n'importe quelle lettre, O étant exclus.
          o [^0-9] recherche n'importe quel caractère autre que numérique.
          o [:alpha:] représente l'ensemble des caractères alphabétiques, donc [[:alpha:]] est équivalent à [A-Za-z]
          o [=a=] représente la classe des caractères semblables à a, donc ici les lettres minuscules
          o [=0=] représente la classe des chiffres

    * +, * et ? servent à exprimer une répétition :
          o fo+ reconnait la chaine fo suivi de n fois la lettre O, donc foo, fooo, fooo, ...
          o fo* reconnait les chaines f, fo, fo, ..., c'est à dire que le o est optionnel (de 0 à n fois)
          o fo? Le ? signifie zéro ou 1 fois, donc reconnait seulement les chaines f et fo

    * {} servent à exprimer une répétition, mais avec plus de précision :
          o {,3} signifie trois fois au plus
          o {2,} signifie deux fois au minimum
          o {2} signifie deux fois et deux fois seulement
      Exemple : [a-f0-9]{8} cherche tous les chiffres hexadecimaux sur 8 caractères

    * Le caractère . représente n'importe quel caractère, autre que fin de ligne. Il est souvent associé à * pour désigner une succession quelconque de caractères

    * Les parenthèses () servent à grouper un ensemble de caractères tel que (ab) qui signifie "ab" en tant que chaine de caractères et non plus un ensemble de caractères. Avec certains outils, permet en plus de mémoriser l'occurence trouvée, laquelle peut-être réétiliser par la suite dans l'expression sous la forme : \1,\2,...\n. Par exemple : ([au]\1)+ reconnait une séquence de a ou de u comme par exemple "aaaaaa" ou "uuu".

    * Le caractère | sert à établir une alternative : (oo|ba) recherche la chaine "oo" ou bien "ba".

    * ?: se rajoute en début d'une expression entre parenthèses pour ne pas mémoriser : (?:oo|ba)

    * Les caractères ^ et $ repèrent les débuts et fin de ligne.

    * Les raccourcis :
          o \w représente l'ensemble [A-Za-z]
          o \W représente l'ensemble [^A-Za-z] (soit la négation du précédent)
          o \d représente l'ensemble [0-9]
          o \D représente l'ensemble [^0-9]
          o \b représente les caractères d'espacement
          o \B représente la négation de \b

    * Un remplacement d'une occurence par une chaine s'écrit : /chaine1/chaine2/, ou chaine2 viendra remplacer l'occurence de chaine1. Exemple : /foo/bar/ remplace "foo" par "bar"

    * ?!chaine négative la recherche d'une chaine
      . Par exemple, pour chercher tous les fichiers autres que ceux ayant l'extension ".bat" ou ".pif", on écrit :

      ^.*\.(?!(bat|pif)$).*$,
      où :
          o ^ exprime le début de ligne,
          o .* une série de caractères quelconques représentant le nom du fichier (sans extension),
          o \. le caractère ".",
          o (?!(bat|pif)$) la négation des chaines "bat" ou "pif", et seulement elles puisqu'elles doivent etre suivi du caractère de fin de ligne (présence du symbole $ à la suite),
          o .* qui désigne les caractères correspondant à l'extension du fichier,
          o $ pour la fin de ligne.

