Outils pour utilisateurs

Outils du site


enseignement:lea:cours:informatique:linux:regexp

Unix pour linguistes : expressions régulières

Outils pour le texte

Extrait du cours « Application corpus » :


Regexp POSIX

Exemples

Si on cherche les participes présent, les candidats sont les mots finissant (sic !) par “ant”.

  1. Première idée : chercher la chaîne “ant”. On récupère alors beaucoup de mots dont nos participes.
  2. On peut faire mieux : chercher « tous les mots contenant “ant” » ; on cherche alors “.*ant”. Le “.” matche tout caractère imprimable (hormis la fin de ligne), “*” indique “ce qui précède, zéro fois ou plus”. “.*ant” matche donc les chaînes qui comportent 'ant' et éventuellement un caractère avant :
    • faisant
    • enseignants
  3. On peut faire encore mieux : chercher « toutes les chaînes contenant notre suffixe suivi d'une espace ou des caractères de ponctuation “,”, “.” et “)” » 1). On cherche donc “.*ant[ ,.)]”. Ici les crochets “[” et “]” définissent une classe de caractères, classe définie comme étant l'un des trois signes de ponctuation et l'espace.
  4. Enfin, on peut chercher les mots finissants par “ant” : “.+ant\>”. “\>” marque la fin d'un mot (de même, “\<” marque le début d'un mot) et “+” indique que le motif précédent est présent au moins une fois.
Vous pouvez utiliser http://wall.eila.univ-paris-diderot.fr/dyn/grep.cgi pour tester.

Synthèse

On vient de voir que dans une regexp, les caractères ou chaînes littéraux sont indiqués tels quel. Nous avons surtout vu que :

  • tout caractère imprimable est matché par “.”
  • que le motif précédent est matché zéro fois ou plus par “*”
  • que le motif précédent est matché une fois ou plus par “+”
  • que les débuts (resp. fins) de « mot » sont marqués par “\<” (resp. “\>”)
  • que des classes de caractères peuvent être définies par “[…]”

Interrogeons-nous maintenant sur les usages du mot espace. Il peut être masculin dans la langue générale ou féminin en typographie. Pour simplifier, on pourrait chercher les occurrences dont le genre est marqué par l'article indéfini : “\<un(|e) (|\<.*\> )espace\>”.

Cette expression matche :

  • une espace
  • un large espace

Ici on a utilisé la possibilité d'indiquer des alternatives, marquées par (…|…).

Syntaxe

Regexp Signification
A Lettre A
[a-z] Lettres minuscules de a à z
[A-Ea-e] Lettres de a à e, majuscules et minuscules
[0-9] Chiffres
[^aeiou] Tout caractère sauf une voyelle minuscule
^ Début de ligne
$ Fin de ligne
ab* a suivi de zéro, un ou plusieurs b
ab+ a suivi d'un ou plusieurs b
b{2,4} entre 2 et 4 occurences de b
b? zéro ou une occurrence de b
a|b a ou b

Pour matcher les caractères “.”, “*”, “?”, “+”, “^”, “$” il faut les échapper par un “\” : “eila\.univ-paris-diderot\.fr” matche notre nom de domaine.

Références

On peut appeler un motif déjà matché : encadrer le premier par des “(” et “)” et l'appeler avec “\N”N est un nombre (entier !) renseignant le motif à rappeler. Par exemple, pour trouver les consonnes doubles : “([a-z])\1”.

De même, on peut chercher les palindromes de 5 lettres : “(.)(.).\2\1” ; on matche radar et sexes par exemple.

Les parenthèses permettent donc de marquer un motif et de grouper des alternatives.

Exercices

Utiliser le paragraphe de l'introduction pour :

  1. chercher toutes les occurrences de et
  2. chercher toutes les occurrences de et et est
  3. chercher toutes les occurrences de l'article indéfini singulier
  4. chercher les mots au pluriel
  5. chercher les mots contenant “exp” et suivi d'un autre mot en minuscule ; “exp(|ression(|s)) [a-z]+” ne matche pas tout, pourquoi ?
  6. chercher toutes les occurrences de est suivi d'un participe passé ; commencer par les verbes du premier groupe ;-)
  7. chercher les mots contenant une consonne double commençant par une majuscule
2008/09/27 10:52
1)
Valable si les règles de typographie française sont respectées, les caractères de ponctuation haute “;”, “!”, “?”, “»” et “:” étant précédés d'une espace fine ; voir à ce sujet Règles élémentaires de typographie française.
enseignement/lea/cours/informatique/linux/regexp.txt · Dernière modification: 2009/04/05 14:44 par Pascal Cabaud