Quelques expressions régulières simples (1) Daniel Tschirhart : Programmation Java V1.34 Soit à rechercher dans un document le mot elvis. Spécifier l expression suivante : 1. elvis recherchera tous les mots contenant elvis soit : elvis, elvise, pelvis, 3
Quelques expressions régulières simples (2) Daniel Tschirhart : Programmation Java V1.34 L expression précédente peut être améliorée de façon suivante : 2. \belvis\b \b est un méta caractère qui signifie chercher le début ou la fin d un mot. En spécifiant cette expression on ne cherchera que le mot elvis. 4
Quelques expressions régulières simples (3) Daniel Tschirhart : Programmation Java V1.34 Supposons rechercher sur la même ligne le mot elvis suivi de tous les mots précédents le mot concert. Le «.»est un méta caractère signifiant n importe quel caractère excepté le caractère newline. Le caractère «*» répète le nombre de fois nécessaire le méta caractère ou le caractère précédent. Ainsi «.*» signifie les tous caractères excepté newline. L expression suivante effectue la recherche désirée: 3. \belvis\b.*\bconcert\b 5
Déterminer la validité du format d un numéro de téléphonet Soit à rechercher sur une page Web les numéros de téléphone ayant le format : xxx-xxxxxxxxxx (exemple 033-0546314755). L expression suivante permet de spécifier ce format: 4. \b\d\d\d-\d\d\d\d\d\d\d\d\d\d \d signifie tout digit, - n a pas de signification ici en tant que méta caractère et signifie ce qu il représente. Il est possible d éviter la répétition des caractères \d par l expression suivante : 5. \b\d{3}-\d{10} 6
Quelques méta m caractères res de base Nous connaissons déjà \b, \d,., *. Le caractère \s représente n importe quel séparateur (espace, tabulation, nouvelle ligne, ), de même \w représente n importe que caractère alphanumérique. Exemple : \ba\w*\b recherche tous les mots commençant par le lettre a \d+ recherche tous les mots ne contenant que des chiffres (+ est identique à * sauf qu il nécessite au moins une répétition). \b\w{6}\b trouve un mot de 6 lettres. 7
Syntaxe des motifs d expression régulir gulière Daniel Tschirhart : Programmation Java V1.34 La syntaxe des motifs est très riche. 1. Chaînes littérales 2. Méta caractères 3. Classes de caractères 4. Quantificateurs 5. Groupes de capture 6. Frontières de recherche 8
Liste des méta m caractères res 9
Méta caractères res : exemples [^x] [aeiou] [a-z,a-z] [^aeiou] Tous caractères sauf x Tous caractères aeiou Tous caractères majuscules et minuscules Tous caractères sauf aeiou 10
Séquence d éd échappement Il y a un problème lorsque que l on cherche un caractère représentant un méta caractère comme par exemple «^»ou«$». Le caractère «\»permet de supprimer la sémantique du méta caractère. Ainsi : «\^», «\.», et «\\», représentent les littéraux «^», «.», et «\». Dans une chaîne de caractère Java, le caractère «\» est considéré comme séquence d échappement. Ainsi : \b représente le caractère de contrôle bell et \\b le méta caractère \b 11
Répétitions * Répète un nombre de fois quelconque + Répète au moins une fois? Répète zéro ou une fois {n} Répète n fois {n,m} Répète entre n et m fois {n,} Répète au minimum n fois 12
Frontières res de recherche Il est souvent intéressant de forcer l emplacement des motifs recherchés : en début de ligne, en fin de mot Les «spécificateurs de frontière» sont résumés dans le tableau suivant : 13
Classes de caractères res 14
Règles de constructions des classes de caractères res personnalisées es 15
Groupe capturant Les parenthèses permettent de regrouper les expressions. Exemple : (\d{1,3}\.){3}\d{1,3} L expression précédente recherche 3 séquences de 1..3 digits terminés par un «.»suivi d une autre expression de 1..3 digits. Exemple 192.168.0.1 L expression précédente n est cependant pas complète puisqu elle autorise des nombres supérieurs à 255. L expression suivante permet de corriger ce défaut. \b((2[0-4]\d 25[0-5] [01]?\d\d?)\.){3}(2[0-4]\d 25[0-5] [01]?\d\d?)\b 16
Quantificateurs 17
Annexe 1 - les REGEX sous Perl Les regex Posix utilisée par exemple par Grep. Les regex Perl en sont une variante. (Il existe aussi les posixextended qui y sont similaire) Tout en restant des regex, ils offrent des possibilités différentes. La principale différence est que ( et { sont les caractères réels parenthèse et crochets en Posix, \( et \{ étant les caractères spéciaux, alors qu'en Perl ou posix-extended ( et { sont des caractères spéciaux, \( et \{ étant les caractères réels parenthèse et crochets Voyons-en les points les plus important, et donnons d'autres exemples. (pour l'examen, tout mélange de regex Perl Posix dans les réponse est accepté tant qu'il n'est pas ambigü, c'est à dire qu'il n'a qu'une seule interprétation possible ou que vous précisez s'il doit être interprêté Perl ou Posix)