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:45] 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]]\\ | ||
- | |||
<note> | <note> | ||
Ligne 179: | Ligne 175: | ||
| ''( )'' | 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 strictement à ''aaa'' . | | | ''{ }'' | "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 : [[https://en.wikipedia.org/wiki/Regular_expression#Standards]] | + | * 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 342: | 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 ^ |