Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format
PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shells:bash-vii-globs-etendus-regex [09/07/2014 11:32] Hypathie [Correspondance de motifs avec les expressions rationnelles] |
doc:programmation:shells:bash-vii-globs-etendus-regex [09/07/2014 13:04] Hypathie [INDEX 1] |
||
---|---|---|---|
Ligne 156: | Ligne 156: | ||
* de vérifier la correspondre entre une chaîne (valeur d'une variable à gauche) et le modèle regex à droite ; | * de vérifier la correspondre entre une chaîne (valeur d'une variable à gauche) et le modèle regex à droite ; | ||
* ou encore de vérifier la correspondance entre une variable (constituée d'une chaîne de caractères littérales), et une variable constituée d'une regex. | * ou encore de vérifier la correspondance entre une variable (constituée d'une chaîne de caractères littérales), et une variable constituée d'une regex. | ||
- | |||
- | Voici quelques liens qui présentent la syntaxe et les caractères utilisables avec Bash (sans les commandes ''grep'', ''sed'', ''awk'').\\ | ||
- | * [[http://mywiki.wooledge.org/RegularExpression]]\\ | ||
- | * [[https://en.wikipedia.org/wiki/Regular_expression#Standards]]\\ | ||
<note> | <note> | ||
Ligne 172: | Ligne 168: | ||
**Voici les caractères utilisables :** | **Voici les caractères utilisables :** | ||
^ "signes" regex ERE basique ^ signification (comparez avec le tableau de l'index) ^ | ^ "signes" regex ERE basique ^ signification (comparez avec le tableau de l'index) ^ | ||
- | | ''.'' | Correspond à tout caractère unique. Dans expressions POSIX entre crochets, le caractère point correspond à un point littéral | | + | | ''.'' | Correspond à tout caractère unique. | |
- | | ''[ ]'' | Correspond à un seul caractère qui est contenue dans les parenthèses. On peut mélanger [abcx-z] correspond à "a", "b", "c", "x", "y" ou "z", de même que [a-cx-z]. Le caractère - est traité comme un caractère littéral si c'est le dernier ou le premier. | | + | | ''[ ]'' | Correspond à un seul caractère qui est contenue dans ''[ ]''. On peut mélanger [abcx-z] correspond à ''a'', ''b'', ''c'', ''x'', ''y'' ou ''z'', de même que ''[a-cx-z]''. Le caractère ''-'' est traité comme un caractère littéral si c'est le dernier ou le premier. | |
- | | ''[^ ]'' | Correspond à un seul caractère qui n'est pas contenu dans les parenthèses. Par exemple, ''[^ abc]'' correspond à tout caractère autre que "a", "b" ou "c". | | + | | ''[^ ]'' | Correspond à un caractère qui n'est pas contenu dans les parenthèses. Par exemple, ''[^abc]'' correspond à tout caractère autre que a, b ou c. | |
| ''^ '' | Correspond à la position de départ dans la chaîne. | | | ''^ '' | Correspond à la position de départ dans la chaîne. | | ||
| ''$'' | Correspond à la position de fin de la chaîne ou la position juste avant un saut de ligne de chaîne interminable. | | | ''$'' | Correspond à la position de fin de la chaîne ou la position juste avant un saut de ligne de chaîne interminable. | | ||
- | | ''( )'' | Définit une sous-expression marquée. La chaîne correspondante entre parenthèses peut être rappelé plus tard (voir l'entrée suivante, \ n). Une sous-expression marquée est aussi appelé un groupe de blocs ou de capturer. Mode BRE nécessite \ (\). | | + | | ''( )'' | Définit une sous-expression marquée. La chaîne correspondante entre parenthèses peut être rappelé plus tard (voir l'entrée suivante, ''\ n''). Une sous-expression marquée est aussi appelé un groupe de blocs ou de capturer. Mode BRE nécessite \ (\). | |
- | | ''\n'' | Correspond au nombre n de sous-chaîne, où n est un chiffre de 1 à 9.\\ Écriture équivalente à {n} | | + | | ''\n'' | Correspond au nombre ''n'' de sous-chaîne, où ''n'' est un chiffre de 1 à 9.\\ Écriture équivalente à ''{n}'' | |
- | | ''*'' | Correspond à zéro ou plusieurs fois l'élément précédent.\\ Par exemple, ''ab * c'' correspond à "ac", "abc", "abbbc», etc. Ou encore, ''[xyz] *'' correspond à " ", "x", "y", "z", "zx", "zyx", "xyzzy ", et ainsi de suite. ''(ab) *'' correspond à "", "b", "abab", "ababab", et ainsi de suite. | | + | | ''*'' | Correspond à zéro ou plusieurs fois l'élément précédent.\\ Par exemple, ''ab* c'' correspond à "ac", "abc", "abbbc», etc. Ou encore, ''[xyz]*'' correspond à ''x'', ''y'', ''z'', ''zx'', ''zyx'', ''xyzzy'', et ainsi de suite. ''(ab)*'' correspond à ''a'', ''b'', ''abab'', ''ababab'', et ainsi de suite. | |
- | | ''{m,n}'' | Correspond au moins à m fois mais pas plus de n fois l'élément précédent.\\ Par exemple, ''a{3,5}'' correspond uniquement "aaa", ou "aaaa", ou "aaaaa". | | + | | ''{m,n}'' | l'élément précédent correspond au moins à ''m'' fois, mais pas plus de ''n'' fois .\\ Par exemple, ''a{3,5}'' correspond uniquement ''aaa'', ou ''aaaa'', ou ''aaaaa''. | |
- | | ''{ }'' | "exactement trois fois" par exemple ''a{3}'' correspond aaa seulement. (équivalent de aaa d'expression) | | + | | ''{ }'' | "exactement trois fois" par exemple ''a{3}'' correspond strictement à ''aaa'' . | |
| ''{n,}'' | "jusqu'à trois fois". «trois fois ou plus». Par exemple, ''{3,}'' correspond aaa ou aaaa, etc. (équivalent de ''a*'') | | | ''{n,}'' | "jusqu'à trois fois". «trois fois ou plus». Par exemple, ''{3,}'' correspond aaa ou aaaa, etc. (équivalent de ''a*'') | | ||
- | | ''{,n}'' | ''a{,3}'' "jusqu'à trois fois". Correspond à la chaîne vide ou a ou aa ou aaa (équivalent de ''| a | aa | aaa''.| | + | | ''{,n}'' | ''a{,3}'' "jusqu'à trois fois". Correspond à la ''chaîne vide'' ou ''a'' ou ''aa'' ou ''aaa'' (équivalent de ''a|aa|aaa''.| |
|POSIX extended | Bash avec correctif, sinon il faut \ devant parenthèse et crochet. ''\( \)'' et ''\{ \}'' | | |POSIX extended | Bash avec correctif, sinon il faut \ devant parenthèse et crochet. ''\( \)'' et ''\{ \}'' | | ||
|autres caractères | signification | | |autres caractères | signification | | ||
- | | ''?'' | Correspond zéro ou une fois à l'élément précédent. Par exemple, ab? c correspond seulement "ac" ou "abc". | | + | | ''?'' | Correspond zéro ou une fois à l'élément précédent. Par exemple, ''ab?c'' correspond seulement ''ac'' ou ''abc''. | |
- | | ''+'' | Correspond une ou plusieurs fois à l'élément précédent. Par exemple, ab + c correspond à "abc", "abbc", "abbbc", et ainsi de suite, mais pas "ac". | | + | | ''+'' | Correspond une ou plusieurs fois à l'élément précédent. Par exemple, ''ab+c'' correspond à ''abc'', ''abbc'', ''abbbc'', et ainsi de suite, mais pas "ac". | |
- | | ''|'' | Correspond à l'expression d'avant OU l'expression d'après l'opérateur. Par exemple, ''abc|def'' correspond à "abc" ou "def". | | + | | ''|'' | Correspond à l'expression d'avant ''ou'' l'expression d'après l'opérateur. Par exemple, ''abc|def'' correspond à ''abc'' ou ''def''. | |
| Et toutes [[doc:programmation:shell:regexp#les-ensembles-de-caracteres-possibles|les classes prédéfinies]]. |''[:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]'' | | | Et toutes [[doc:programmation:shell:regexp#les-ensembles-de-caracteres-possibles|les classes prédéfinies]]. |''[:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]'' | | ||
+ | * Référence (ce tableau résume le contenu de ces trois liens) : | ||
+ | * [[https://en.wikipedia.org/wiki/Regular_expression#Standards]] | ||
+ | * [[https://en.wikipedia.org/wiki/Regular_expression#Standards#Uses]] | ||
+ | * [[https://en.wikipedia.org/wiki/Regular_expression#Standards#Character%20classes]] | ||
+ | * Autre référence : [[http://mywiki.wooledge.org/RegularExpression]] | ||
==== Apprenons à construire une expression régulière==== | ==== Apprenons à construire une expression régulière==== | ||
Ligne 341: | Ligne 342: | ||
**Un grand merci à captnfab pour conseils avisés et toutes ses corrections.** | **Un grand merci à captnfab pour conseils avisés et toutes ses corrections.** | ||
- | =====INDEX ===== | + | =====INDEX 1===== |
- | ====1) rappel des principaux caractères des expressions rationnelles ==== | + | ==== Rappel des principaux caractères des expressions rationnelles ==== |
- | Avec grep, sed, awk, perl\\ | + | Un petit rappel non exhaustif des caractères spéciaux relatifs aux expressions rationnelles communs à ''grep'', ''sed'', ''awk'', ''perl''.\\ |
Pour une initiation aux expressions régulières ou rationnelles, voir :\\ | Pour une initiation aux expressions régulières ou rationnelles, voir :\\ | ||
- | http://www.unixmail.fr/une-initiation-aux-expressions-rationnelles/\\ | + | * http://www.unixmail.fr/une-initiation-aux-expressions-rationnelles/\\ |
- | http://http://culot.org/public/Docs/regexp.html\\ | + | * http://http://culot.org/public/Docs/regexp.html\\ |
- | Un petit rappel non exhaustif des caractères spéciaux relatifs aux expressions rationnelles : | + | ^ ^ ^ |
+ | |Correspondance : | ''m/motif/''\\ ''/motif/'' | | ||
+ | |Substitution : | ''s/motif/chaîne/'' | | ||
+ | |Correspondance entre regex et variable : | '' =~ ''\\ $v =~ m/toto/\\ $v =~ s/toto/titi/ | | ||
+ | |Les caractères spéciaux : | ''\'' ''|'' ''( )'' ''[ ]'' ''{ }'' ''^'' ''$'' ''*'' ''+'' ''?'' ''.'' | | ||
+ | |Pour représenter saut de ligne : | ''\n'' | | ||
+ | |Pour représenter retour chariot : | ''\r'' | | ||
+ | |Pour représenter tabulation : | ''\t'' | | ||
+ | |Pour représenter saut de page : | '' \f''| | ||
+ | |Pour représenter échappement : | ''\e'' | | ||
+ | |Le point représente n'importe quel caractère. | ''.'' | | ||
+ | |La paire de crochet "matche" l'un des caractères entre crochet | ''[ ]'' | | ||
+ | |Intervalle :\\ '' ''\\ Tout intervalle est envisageable,\\ par exemple ''u-w'' ou toute autre combinaison tant que\\ le numéro ''ASCII'' du premier caractère est inférieur à celui du second.\\ Un intervalle peut prendre place au milieu d'un motif quelconque.\\ Pour rechercher un ''-'' littéral, le mettre en dernier dans un intervalle. | \\ '' ''\\ '' ''\\ ''[a-z]'' (l'une des lettres minuscules de l'alphabet)\\ ''[A-Z]'' (l'une des lettres majuscules de l'alphabet)\\ ''[0-9]'' (un des caractères numériques) | | ||
+ | |Raccourcis pour des ensembles courants\\ | ''\d'' qui correspond à ''[0-9]''\\ ''\D'' qui correspond à ''[cfl0-9]''\\ ''\w'' qui correspond à ''[a-zA-Z0-9_]''\\ ''\W'' qui correspond à ''[cfla-zA-Z0-9_]''\\ ''\t'' qui correspond à une tabulation\\ ''\n'' qui correspond à un saut de ligne\\ ''\n'' qui correspond à un saut de ligne\\ ''\r'' qui correspond à un retour chariot\\ ''\s'' qui correspond à un espace blanc\\ ''\S'' qui correspond à n'est pas un espace blanc | | ||
+ | |Quantificateurs :\\ '' ''\\ 0 fois ou plus\\ 1 fois ou plus\\ 0 ou 1 fois\\ n fois exactement | '' ''\\ '' ''\\ ''*''\\ ''+''\\ ''?''\\ ''{n}'' | | ||
+ | |Mémorisation : \\ de variables $1 $2 ...| ''( )'' ''( )'' ... | | ||
+ | |Exemple:\\ '' ''\\ ''prenom.nom@domaine.ext''\\ (\w+) : $1\\ (\w+) : $2 | \\ '' ''\\ ''/\b(\w+)\.(\w+)@\w+\.w{2,4}\b/'' | | ||
+ | |Substitution de variables : | ''$s = "toto";''\\ ''if( $v =~ m/$s/ ) { ... }'' | | ||
+ | |Options : | ''i'' : Rend le motif insensible à la case (minuscules/majuscules)\\ '' '' l'expression régulière ''m/toto/i''\\ ''g'' : Permet d'effectuer toutes les substitutions,\\ '' '' et pas que la première.\\ ''e'' : Évalue le membre de droite comme une expression Perl.\\ ''o'' : La compilation a lieu une seule fois lors de la première exécution. | | ||
- | <code> | ||
- | Syntaxe correspondance : m/motif/ ou /motif/ | ||
- | Syntaxe substitution : s/motif/chaîne/ | ||
- | Lier une variable à une regex : =~ | ||
- | $v =~ m/toto/ | ||
- | $v =~ s/toto/titi/ | ||
- | Les caractères spéciaux : \ | ( ) [ ] { } ^ $ * + ? . | ||
- | |||
- | pour représenter saut de ligne : \n | ||
- | pour représenter retour chariot : \r | ||
- | pour représenter tabulation : \t | ||
- | pour représenter saut de page : \f | ||
- | pour représenter échappement : \e | ||
- | |||
- | Le point : . n'importe quel caractère | ||
- | |||
- | La paire de crochet : [ ] matche l'un des caractères entre crochet | ||
- | |||
- | Intervalle : [a-z] l'une des lettres minuscules de l'alphabet | ||
- | : [A-Z] l'une des lettres majusculs de l'alphabet | ||
- | : [0-9] un des caractères numériques | ||
- | Tout intervalle est envisageable, | ||
- | par exemple u-w ou toute autre combinaison tant que | ||
- | le numéro ASCII du premier caractère est inférieur à celui du second. | ||
- | |||
- | Un intervalle peut prendre place au milieu d'un motif quelconque. | ||
- | |||
- | Pour rechercher un - littéral, le mettre en dernier dans un intervalle. | ||
- | |||
- | Raccourcis pour des ensembles courants : | ||
- | (motifs abrégés) : \d qui correspond à [0-9] | ||
- | : \D qui correspond à [cfl0-9] | ||
- | : \w qui correspond à [a-zA-Z0-9_] | ||
- | : \W qui correspond à [cfla-zA-Z0-9_] | ||
- | : \t qui correspond à une tabulation | ||
- | : \n qui correspond à un saut de ligne | ||
- | : \n qui correspond à un saut de ligne | ||
- | : \r qui correspond à un retour chariot | ||
- | : \s qui correspond à un espace blanc | ||
- | : \S qui correspond à N’EST PAS un espace blanc | ||
- | |||
- | Quantificateurs | ||
- | 0 fois ou plus : * | ||
- | 1 fois ou plus : + | ||
- | 0 ou 1 fois : ? | ||
- | n fois exactement : {n} | ||
- | |||
- | Mémorisation : ( ) ( ) | ||
- | ^ ^ | ||
- | : $1 $2 | ||
- | | ||
- | : prenom.nom@domaine.ext | ||
- | : /\b(\w+)\.(\w+)@\w+\.w{2,4}\b/ | ||
- | : $1 $2 | ||
- | |||
- | Substitution de variables : $s = "toto"; | ||
- | : if( $v =~ m/$s/ ) { ... } | ||
- | | ||
- | Options : i Rend le motif insensible à la case (minuscules/majuscules) | ||
- | l'expression régulière m/toto/i | ||
- | : g Permet d'effectuer toutes les substitutions, | ||
- | pas que la première. | ||
- | : e Évalue le membre de droite comme une expression | ||
- | Perl. | ||
- | : o La compilation a lieu une seule fois lors de la première | ||
- | exécution. | ||
- | </code> | ||
- | ====2) ASCII==== | + | =====INDEX 2 ===== |
+ | Voici l'ordre des caractères ASCII : | ||
^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ | ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ |