perl:expressions_regulieres
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
perl:expressions_regulieres [2009/03/15 01:02] – créée root | perl:expressions_regulieres [2013/03/13 11:09] (Version actuelle) – root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | == 1. Généralités == | + | ====== 1. Généralités |
- | Les expressions régulières représentent un langage à elles toute seule, embarqué dans des outils comme Java ou Perl, il s'agit d'un langage dans le langage ! Elles ont été conçues comme une généralisation du fameux " | + | Les expressions régulières représentent un langage à elles toute seule, embarqué dans des outils comme Java ou Perl, il s'agit d'un langage dans le langage ! Elles ont été conçues comme une généralisation du fameux " |
- | * trouver et compter des occurences de texte particulières | + | |
- | * reconnaître ou valider une forme de texte particulière | + | |
- | * remplacer des occurences de texte par une autre | + | * reconnaître ou valider une forme de texte particulière |
+ | * remplacer des occurences de texte par une autre | ||
Perl ayant été conçu originellement pour du "data mining", | Perl ayant été conçu originellement pour du "data mining", | ||
- | * les expressions régulières POSIX (" | + | |
- | * les expressions régulières Perl | + | * les expressions régulières Perl |
- | * les expressions régulières compatibles Perl (''' | + | * les expressions régulières compatibles Perl (**PCRE**) |
- | Aujourd' | + | Aujourd' |
- | == 2. Forme générale == | + | ====== 2. Forme générale |
- | === Matching === | + | ===== Matching |
- | En perl, une expression régulière est en général délimitée par le caractère | + | En perl, une expression régulière est en général délimitée par le caractère |
- | my $text = "Le chameau dans le desert"; | + | <code perl> |
- | print " | + | |
+ | print " | ||
+ | </ | ||
- | Cependant si l'on spécifie explicitement le préfixe | + | Cependant si l'on spécifie explicitement le préfixe |
- | my $path = "/ | + | <code perl> |
- | print "un programme" | + | |
+ | print "un programme" | ||
+ | </ | ||
- | Par défaut, le résultat d'une opération de '' | + | Par défaut, le résultat d'une opération de //matching// renvoie une valeur booléenne. Si on est à la recherche de plusieurs occurences et que l'on veut les compter, on utilise d'une part le suffixe |
- | my $text = "un chasseur sachant chasser"; | + | <code perl> |
- | my @cha = $text =~ /cha/g; | + | |
- | print scalar(@cha)." | + | my @cha = $text =~ /cha/g; |
+ | print scalar(@cha)." | ||
+ | </ | ||
Enfin il est possible d' | Enfin il est possible d' | ||
- | my $text = "Le chameau dans le desert"; | + | <code perl> |
- | print "Pas de chameau à l' | + | my $text = "Le chameau dans le desert"; |
+ | print "Pas de chameau à l' | ||
+ | </ | ||
- | === Substitution === | + | ===== Substitution |
L' | L' | ||
- | my $text = "un chasseur sachant chasser"; | + | <code perl> |
- | $text =~ s/ | + | my $text = "un chasseur sachant chasser"; |
- | $text =~ s/ | + | $text =~ s/cha/cho/; # text devient 'un chosseur sachant chasser' |
+ | $text =~ s/ | ||
+ | </ | ||
- | On retrouve le même suffixe optionnel pour ne traiter que la première occurence (défaut) ou toutes les occurences (suffixe | + | On retrouve le même suffixe optionnel pour ne traiter que la première occurence (défaut) ou toutes les occurences (suffixe |
Le résultat de l' | Le résultat de l' | ||
- | my $text = "un chasseur sachant chasser"; | + | <code perl> |
- | print ($text =~ s/ | + | my $text = "un chasseur sachant chasser"; |
+ | print ($text =~ s/ | ||
+ | </ | ||
- | === Extraction === | + | ===== Extraction |
- | Hormis le contexte liste du mode '' | + | Hormis le contexte liste du mode //matching//, il existe un moyen général pour récupérer des motifs reconnus par une expression régulière, |
- | my @a = "Perl c'est bien" | + | <code perl> |
- | | + | |
- | | + | # $1 = " |
+ | # $2 = " | ||
+ | </ | ||
- | La forme avec les variables | + | La forme avec les variables |
- | + | ====== 3. Caractères spéciaux | |
- | == 3. Caractères spéciaux == | + | |
Commençons par la liste des caractères spéciaux, c' | Commençons par la liste des caractères spéciaux, c' | ||
- | {| bgcolor="# | + | ^ **\** ^ Echappement du cacactère suivant^ |
- | |- | + | | **^**, **$** | Début et fin de ligne| |
- | || ''' | + | | **.** | Un caractère quelconque| |
- | |- | + | | **|** | Alternative (ou logique)| |
- | || ''' | + | | **()** | Groupement| |
- | |- | + | | **[]** | Classes de caractère| |
- | || ''' | + | | ***** | 0, 1 ou plusieurs occurences| |
- | |- | + | | **+** | 1 ou plusieurs occurences| |
- | || ''' | + | | **?** | 0 ou 1 occurence| |
- | |- | + | | **{}** | nombre variable d' |
- | || ''' | + | |
- | |- | + | |
- | || ''' | + | |
- | |- | + | |
- | || ''' | + | |
- | |- | + | |
- | || ''' | + | |
- | |- | + | |
- | || ''' | + | |
- | |- | + | |
- | || ''' | + | |
- | |} | + | |
- | Tous les autres caractères sont considérés et recherchés tels quels dans les chaînes à traiter. Cela signifie qu'en particulier, | + | Tous les autres caractères sont considérés et recherchés tels quels dans les chaînes à traiter. Cela signifie qu'en particulier, |
- | / | + | / |
Avec Perl, il est possible d' | Avec Perl, il est possible d' | ||
- | / | + | |
- | == 4. Répétitions == | + | ====== 4. Répétitions |
Les motifs de recherche dans une expression de régulière peuvent être recherchés selon divers critères d' | Les motifs de recherche dans une expression de régulière peuvent être recherchés selon divers critères d' | ||
- | {| bgcolor="# | + | ^ (motif)* |
- | |- | + | | (motif)+ | Recherche une ou plusieurs occurences de //motif//| |
- | || (motif)* | + | | (motif)? | Recherche zero ou une occurence de //motif//| |
- | |- | + | | (motif){a} | Recherche exactement a occurences de //motif//| |
- | || (motif)+ | + | | (motif){a, |
- | |- | + | | (motif){a,} | Recherche au moins a occurences de //motif//| |
- | || (motif)? | + | |
- | |- | + | |
- | || (motif){a} | + | |
- | |- | + | |
- | || (motif){a, | + | |
- | |- | + | |
- | || (motif){a, | + | |
- | |} | + | |
Par défaut, l' | Par défaut, l' | ||
- | {| bgcolor="# | + | ^ /.*/ ^ Recherche une occurence quelconque, y compris la chaîne vide^ |
- | |- | + | | /erreurs?/ | Recherche les occurence de " |
- | || /.*/ || Recherche une occurence quelconque, y compris la chaîne vide | + | | s/ +/ /g | Remplace toutes les suites d' |
- | |- | + | |
- | || / | + | |
- | |- | + | |
- | || s/ +/ /g || Remplace toutes les suites d' | + | |
- | |} | + | |
- | == 5. Classes de caractère == | + | ====== 5. Classes de caractère |
Si l'on veut rechercher un motif ne correspondant pas à une simple chaîne, mais un agencement quelconques de caractères prédéfinis, | Si l'on veut rechercher un motif ne correspondant pas à une simple chaîne, mais un agencement quelconques de caractères prédéfinis, | ||
- | {| bgcolor="# | + | ^ [A-Z] ^ Recherche n' |
- | |- | + | | [A-Za-z] | Recherche n' |
- | || [A-Z] || Recherche n' | + | | [!%%^%%0-9] | Recherche n' |
- | |- | + | |
- | || [A-Za-z] | + | |
- | |- | + | |
- | || [!^0-9] | + | |
- | |} | + | |
Exemples: | Exemples: | ||
- | {| bgcolor="# | + | ^ [A-Z]{2}-[0-9]{4} |
- | |- | + | |
- | || [A-Z]{2}-[0-9]{4} | + | |
- | |} | + | |
- | Il existe des classes de caractères prédéfinies en Perl, elles permettent de gagner en concision. Chaque classe possède son complément (nom en majuscule décrivant une classe ne contenant | + | Il existe des classes de caractères prédéfinies en Perl, elles permettent de gagner en concision. Chaque classe possède son complément (nom en majuscule décrivant une classe ne contenant |
- | {| bgcolor="# | + | ^ \w (\W) ^ Caractère de mot, cad. alphanumérique et " |
- | |- | + | | \s (\S) | Espacement (espace, tabulation, retour chariot)| |
- | || \w (\W) || Caractère de mot, cad. alphanumérique et " | + | | \d (\D) | Numérique ([0-9])| |
- | |- | + | |
- | || \s (\S) || Espacement (espace, tabulation, retour chariot) | + | |
- | |- | + | |
- | || \d (\D) || Numérique ([0-9]) | + | |
- | |} | + | |
- | == 6. Ancres == | + | ====== 6. Ancres |
On peut également vérifier que le motif recherché est positionné à un endroit précis dans la chaîne de caractère, plus précisément au début où à la fin : | On peut également vérifier que le motif recherché est positionné à un endroit précis dans la chaîne de caractère, plus précisément au début où à la fin : | ||
- | {| bgcolor="# | + | ^ %%/^From (.*)/%% ^ Récupère dans $1 ce qui suit le "From " seulement si la ligne commence par "From "^ |
- | |- | + | | %%s/!+$/./%% | Remplace une série de " |
- | || /^From (.*)/ || Récupère dans $1 ce qui suit le "From " seulement si la ligne commence par "From " | + | | %%/^$/%% | Recherche les lignes vides| |
- | |- | + | |
- | || s/ | + | |
- | |- | + | |
- | || /^$/ || Recherche les lignes vides | + | |
- | |} | + | |
- | '' | ||
+ | //A suivre...// |
perl/expressions_regulieres.1237078928.txt.gz · Dernière modification : 2009/03/15 01:02 de root