all:bibles:langages:regular
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| all:bibles:langages:regular [2025/03/28 08:34] – [Compilation préalable] omeylhoc | all:bibles:langages:regular [2025/08/20 10:04] (Version actuelle) – omeylhoc | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Expressions régulières ====== | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Appariement de motifs ===== | ||
| + | |||
| + | <code perl> | ||
| + | $scalaire =~ m/ | ||
| + | </ | ||
| + | |||
| + | équivalent à | ||
| + | |||
| + | <code perl> | ||
| + | $scalaire =~ / | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | <note tip> | ||
| + | |||
| + | ==== Méta-caractères ==== | ||
| + | |||
| + | Les méta-caractères standards (\n, \t, …) gardent leurs significations. | ||
| + | |||
| + | | \ | Annule le méta-sens du méta-caractère qui suit | | ||
| + | | ∧ | Reconnaît le début de la ligne | | ||
| + | | . | Reconnaît n’importe quel caractère (sauf le caractère nouvelle ligne) | ||
| + | | $ | Reconnaît la fin de la ligne (ou juste avant le caractère nouvelle ligne finale) | | ||
| + | | %%|%% | Alternative | | ||
| + | | ( ) | Groupement (traiter plus tard) | | ||
| + | | [ ] | Classe de caractères (traiter plus tard) | | ||
| + | | \a | Alarme | ||
| + | | \b | Backspace | ||
| + | | \e | Echappement | ||
| + | | \f | Form Feed | | ||
| + | | \n | Nouvelle ligne | | ||
| + | | \r | Retour chariot | ||
| + | | \t | Tabulation | ||
| + | | \v | Tabulation verticale | ||
| + | | \0nnn | Octal | | ||
| + | | \xnn | Hexadécimal | ||
| + | |||
| + | ==== Quantificateurs standards ==== | ||
| + | |||
| + | <note tip>Par défaut un quantificateur est « gourmand », c' | ||
| + | |||
| + | ^ Quantificateur | ||
| + | | Reconnaît 0 fois ou plus (équivalent à {0,}) | * | *? | | ||
| + | | Reconnaît 1 fois ou plus (équivalent à {1,}) | + | +? | | ||
| + | | Reconnaît 0 fois ou 1 fois (équivalent à {0, | ||
| + | | Reconnaît n fois exactement | ||
| + | | Reconnaît au moins n fois | {n,} | {n,}? | | ||
| + | | Reconnaît au moins n fois mais pas plus de m fois | {n,m} | {n, | ||
| + | |||
| + | ==== Assertions de longueur nulle ==== | ||
| + | |||
| + | | \b | Limite d’un mot (le début ou la fin) | | ||
| + | | \B | Autre chose qu’une limite de mot | | ||
| + | | \A | Début de la chaîne | ||
| + | | \Z | Fin de la chaîne (ou juste avant le caractère de nouvelle ligne finale) | ||
| + | | \z | Fin de la chaîne | ||
| + | |||
| + | < | ||
| + | |||
| + | <note tip>Pour reconnaître la fin réelle de la chaîne, en tenant compte du caractère nouvelle ligne, il faut utiliser \z.</ | ||
| + | |||
| + | ==== Reconnaissance des mots et des chiffres ==== | ||
| + | |||
| + | | \w | Caractère de « mot » (y compris le caractère souligné : _) | | ||
| + | | \W | Caractère de non « mot » | | ||
| + | | \s | Caractère d’espacement (tabulation \t compris) | ||
| + | | \S | Caractère autre qu’espacement | ||
| + | | \d | Chiffre | ||
| + | | \D | Non-chiffre | ||
| + | |||
| + | ==== Classe de caractères ==== | ||
| + | |||
| + | | [abcde] | ||
| + | | [a-e] | Caractère compris dans (a, | ||
| + | | [a-z] | Caractère minuscule | ||
| + | | [A-Z] | Caractère majuscule | ||
| + | | [0-9] | Chiffre | ||
| + | | [a-zA-Z_0-9] | ||
| + | | ∧[a-zA-Z_0-9] | ||
| + | | [ \t\n\r\f] | ||
| + | | ∧[ \t\n\r\f] | ||
| + | | [0-9] | Equivalent de \d | | ||
| + | | ∧[0-9] | ||
| + | |||
| + | ==== Mémorisation par parenthèses ==== | ||
| + | |||
| + | L’utilisation de parenthèse permet de regrouper des motifs et de les réutiliser. Les variables $1, $2, $3, … mémorisent le motif apparié respectivement dans la première parenthèse, | ||
| + | Ces opérateurs sont utilisables dans le code, mais aussi dans l’expression régulière. | ||
| + | |||
| + | ==== Opérateurs $&, $` et $’ ==== | ||
| + | |||
| + | | $& | ||
| + | | $` | Chaîne de caractères précédant tout ce qui a été trouvé au cours de la dernière recherche de motif réussie. | ||
| + | | $’ | Chaîne de caractère suivant tout ce qui a été trouvé au cours de la dernière recherche de motif réussie. | ||
| + | |||
| + | ==== Modificateurs ==== | ||
| + | |||
| + | | i | Reconnaissance de motif indépendamment de la case (majuscules/ | ||
| + | | m | Permet de traiter les chaînes multi-lignes. Les caractères « ∧ » et « $ » reconnaissent alors n’importe quel début ou fin de ligne plutôt qu’au début ou à la fin. | | ||
| + | | s | Permet de traiter une chaîne comme une seule ligne. Le caractère « . » reconnaît alors n’importe quel caractère, même une fin de ligne. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ===== Substitution ===== | ||
| + | |||
| + | <code perl> | ||
| + | $scalaire =~ s/ | ||
| + | </ | ||
| + | |||
| + | Remplace « motif » par « remplacement » et retourne le nombre de substitutions effectuées, | ||
| + | |||
| + | < | ||
| + | < | ||
| + | |||
| + | ==== Opérateur de test de précédence ==== | ||
| + | |||
| + | Le caractère « ? » est une assertion de longueur nulle pour tester l’absence de quelque chose en avant. | ||
| + | |||
| + | ==== Modificateurs ==== | ||
| + | |||
| + | | g | Pour effectuer la substitution plusieurs fois | | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Remplacement par liste ===== | ||
| + | |||
| + | <code perl> | ||
| + | tr/ | ||
| + | </ | ||
| + | |||
| + | Substitue les occurrences des caractères recherchés par les caractères de la liste de remplacement et retourne le nombre de caractères remplacés ou supprimés. | ||
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | ==== Modificateurs ==== | ||
| + | |||
| + | | c | C’est le complément de la liste recherchée qui est utilisé. | ||
| + | | s | Les suites de caractères qui sont remplacés par le même caractère sont agrégées en un seul caractère. | ||
| + | | d | Tout caractère spécifié dans listerecherche et sans équivalent dans listeremplacement est effacé. | ||
| + | |||
| + | < | ||
| + | |||
| + | <note tip>Si listeremplacement est vide, listerecherche est utilisé à la place. Ce dernier point est très pratique pour comptabiliser les occurrences d’une classe de caractère ou pour agréger les suites de caractères d’une classe.</ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Découpage de chaîne ===== | ||
| + | |||
| + | <code perl> | ||
| + | split(/ | ||
| + | </ | ||
| + | |||
| + | Découpe une chaîne et en retourne un tableau de chaîne. Par défaut, les champs vides du début sont gardés et ceux de la fin sont éliminés. | ||
| + | |||
| + | Si limit est positif, il fixe le nombre max de champs du découpage (il est possible que le nombre de champs soit inférieur). Si limit est omis ou vaut 0, les champs vides de la fin sont supprimés. | ||
| + | |||
| + | < | ||
| + | < | ||
| + | <note tip>On peut avoir un motif plus long qu’un seul caractère.</ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Exemples ===== | ||
| + | |||
| + | ==== Reconnaissance de pattern ==== | ||
| + | |||
| + | === Nombre entier === | ||
| + | |||
| + | <code perl> | ||
| + | /^\d+$/ | ||
| + | </ | ||
| + | |||
| + | === Nombre décimal === | ||
| + | |||
| + | <code perl> | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | === Adresse IPV4 === | ||
| + | |||
| + | <code perl> | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | === URL === | ||
| + | |||
| + | Avec ou sans http/https ou www | ||
| + | <code perl> | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== Substitution ==== | ||
| + | |||
| + | <code perl> | ||
| + | $var=~s/ | ||
| + | $var=~s/ | ||
| + | </ | ||
| + | |||
| + | ==== Opérateur de test de précédence ==== | ||
| + | |||
| + | <code perl> | ||
| + | / | ||
| + | s/ | ||
| + | </ | ||
| + | |||
| + | ==== Remplacement ==== | ||
| + | |||
| + | <code perl> | ||
| + | tr/ | ||
| + | $i=tr/ | ||
| + | $i=tr/ | ||
| + | tr/ | ||
| + | tr/ | ||
| + | $texte =~ s/;/,/ | ||
| + | $texte =~ s/ | ||
| + | </ | ||
| + | |||
| + | ==== Découpage ==== | ||
| + | |||
| + | <code perl> | ||
| + | split(/ +/,`ls …`); | ||
| + | @noms=split(/ | ||
| + | </ | ||
| + | |||
| + | Exemple d' | ||
| + | < | ||
| + | |||
| + | <code perl> | ||
| + | @tab=split(/:/, | ||
| + | ($nom)= split(/:/, | ||
| + | ($nom, | ||
| + | ($nom, | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Optimisation ===== | ||
| + | |||
| + | ==== Compilation préalable ==== | ||
| + | |||
| + | En perl on peut passer l' | ||
| + | |||
| + | <code perl> | ||
| + | my $pattern = " | ||
| + | if ($texte =~ /$pattern/) { | ||
| + | print " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Pour une expression régulière utilisée plusieurs fois on peut optimiser en compilant l' | ||
| + | |||
| + | <code perl> | ||
| + | my $regex = qr/ | ||
| + | if ($texte =~ $regex) { | ||
| + | print " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | * Si la variable contient des caractères spéciaux d' | ||
| + | * Pour échapper automatiquement les caractères spéciaux il faut utiliser quotemeta() ou l' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Débogueur en ligne ===== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
