| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| powershell_regex [2020/01/17 16:09] – [Les ensembles de caractères] nekan | powershell_regex [2021/03/05 15:59] (Version actuelle) – nekan |
|---|
| ~~CLOSETOC~~ | |
| ====== Les expressions régulières (regex) ====== | ====== Les expressions régulières (regex) ====== |
| | <label type="info">Création</label> --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2020/01/17 15:31// |
| |
| Les expressions régulières ou regex peuvent paraître compliquées au premier abord mais en y regardant de plus près, on se rend compte que c'est plutôt simple. Le principe d'une expression régulière est de créer un schéma qui permettra de valider la forme d'une chaîne de caractères. Par exemple, si dans un script, vous demandez à l'utilisateur de renseigner son numéro de téléphone au format international, il vous faudra valider la réponse de ce dernier. Si il répond ''+33123456789'' pour la france ou ''+8612345678901'' pour un portable chinoix, c'est bon, mais si il répond ''toto@messagerie.com'' ou ''James BOND'', ça ne l'est pas. La réponse va alors pouvoir être comparée à une regex et si le résultat renvoyé est ''$true'', alors la réponse de l'utilisateur correspond au format de réponse attendue. | Les expressions régulières ou regex peuvent paraître compliquées au premier abord mais en y regardant de plus près, on se rend compte que c'est plutôt simple. Le principe d'une expression régulière est de créer un schéma qui permettra de valider la forme d'une chaîne de caractères. Par exemple, si dans un script, vous demandez à l'utilisateur de renseigner son numéro de téléphone au format international, il vous faudra valider la réponse de ce dernier. Si il répond ''+33123456789'' pour la france ou ''+8612345678901'' pour un portable chinoix, c'est bon, mais si il répond ''toto@messagerie.com'' ou ''James BOND'', ça ne l'est pas. La réponse va alors pouvoir être comparée à une regex et si le résultat renvoyé est ''$true'', alors la réponse de l'utilisateur correspond au format de réponse attendue. |
| Voici en suivant les différentes règles structurantes des regex. | Voici en suivant les différentes règles structurantes des regex. |
| |
| <note>Tout caractère ou chaîne de caractères n'étant pas traité ici sera interprété tel quel par la regex.</note> | <callout type="info" icon="true" title="Interprétation">Tout caractère ou chaîne de caractères n'étant pas traité ici sera interprété tel quel par la regex.</callout> |
| |
| ===== Les caractères de structures ===== | ===== Les caractères de structures ===== |
| "tutu" -match "(ta|ti|to){2}" | "tutu" -match "(ta|ti|to){2}" |
| $false</sxh> | | $false</sxh> | |
| | ''\'' | Lorsqu'il précède un des ces caractères reservés ''[]().\^$|?*+{}'', la regex va n'interprètera pas le caractère comme une règle mais seulement comme un simple caractère. Ainsi ''\('' ne signifie pas le début d'un groupe mais simplement le caractère ''(''. | <sxh powershell>"1" -match "[0-9]" | | ''\'' | Lorsqu'il précède un des ces caractères reservés ''[]().\^$|?*+{}'', la regex n'interprètera pas le caractère comme une règle mais seulement comme un simple caractère. Ainsi ''\('' ne signifie pas le début d'un groupe mais simplement le caractère ''(''. | <sxh powershell>"1" -match "[0-9]" |
| $true | $true |
| "1" -match "\[0-9\]" | "1" -match "\[0-9\]" |
| | ''*'' | Indique que la règle précédente peut être répété de 0 à x fois. | <sxh powershell>"a" -match "^[a]*$" | | ''*'' | Indique que la règle précédente peut être répété de 0 à x fois. | <sxh powershell>"a" -match "^[a]*$" |
| $true | $true |
| "" -match "^[a]*$" | '' -match "^[a]*$" |
| $true | $true |
| "aaaaaaaaaaaaaaaaaaaaaaaa" -match "^[a]*$" | "aaaaaaaaaaaaaaaaaaaaaaaa" -match "^[a]*$" |
| | ''+'' | Indique que la règle précédente peut être répété de 1 à x fois. | <sxh powershell>"a" -match "^[a]+$" | | ''+'' | Indique que la règle précédente peut être répété de 1 à x fois. | <sxh powershell>"a" -match "^[a]+$" |
| $true | $true |
| "" -match "^[a]+$" | '' -match "^[a]+$" |
| $false | $false |
| "aaaaaaaaaaaaaaaaaaaaaaaa" -match "^[a]+$" | "aaaaaaaaaaaaaaaaaaaaaaaa" -match "^[a]+$" |
| | ''?'' | Indique que la règle précédente peut être répété de 0 à 1 fois. | <sxh powershell>"a" -match "^[a]?$" | | ''?'' | Indique que la règle précédente peut être répété de 0 à 1 fois. | <sxh powershell>"a" -match "^[a]?$" |
| $true | $true |
| "" -match "^[a]?$" | '' -match "^[a]?$" |
| $true | $true |
| "aaaaaaaaaaaaaaaaaaaaaaaa" -match "^[a]?$" | "aaaaaaaaaaaaaaaaaaaaaaaa" -match "^[a]?$" |
| $false</sxh> | | $false</sxh> | |
| | ''{}'' | Si les ''{}'' contiennent un nombre, il s'agit du nombre d'itération obligatoire de la règle précédente. Les ''{}'' peuvent aussi 2 nombres (x et y),séparés par une virgule, le premier étant plus petit que le second, ce qui signifie que la règle précédente doit être répétée entre x et y fois. y peut être ignoré, ce qui indique une limite haute infinie. | <sxh powershell>"aaa" -match "^[a]{3}$" | | ''{}'' | Si les ''{}'' contiennent un nombre, il s'agit du nombre d'itération obligatoire de la règle précédente. Les ''{}'' peuvent aussi comportées 2 nombres (x et y), séparés par une virgule, le premier étant plus petit que le second, ce qui signifie que la règle précédente doit être répétée entre x et y fois. y peut être ignoré, ce qui indique une limite haute infinie. | <sxh powershell>"aaa" -match "^[a]{3}$" |
| $true | $true |
| "aaa" -match "^[a]{2,3}$" | "aaa" -match "^[a]{2,3}$" |
| "a" -match "\d" | "a" -match "\d" |
| $true</sxh> | | $true</sxh> | |
| | ''\w'' | Correspond à n'importe quel caractère alphabétique. Équivalent de ''[a-z0-9]''. | <sxh powershell>"+" -match "\w" | | ''\w'' | Correspond à n'importe quel caractère alphabétique. Équivalent de ''[a-z0-9_]''. | <sxh powershell>"+" -match "\w" |
| $false | $false |
| "0" -match "\w" | "0" -match "\w" |
| "a" -match "\w" | "a" -match "\w" |
| $true</sxh> | | $true</sxh> | |
| | ''\W'' | Correspond à n'importe quel caractère n'étant pas alphabétique. Équivalent de ''[^a-z0-9]''. | <sxh powershell>"+" -match "\W" | | ''\W'' | Correspond à n'importe quel caractère n'étant pas alphabétique. Équivalent de ''[^a-z0-9_]''. | <sxh powershell>"+" -match "\W" |
| $true | $true |
| "0" -match "\W" | "0" -match "\W" |
| |
| * Vérifier une adresse IPv4 : | * Vérifier une adresse IPv4 : |
| <sxh powershell>"^((25[0-5]|2[0-4][0-9]|[1]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[1]?[0-9]?[0-9])$"</sxh> | <sxh powershell>"^((25[0-5]|2[0-4]\d]|[1]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[1]?\d?\d)$"</sxh> |
| |
| * Vérifier une adresse IPv4, hors adresse de réseau et de broadcast (sans les .0 et .255) : | * Vérifier une adresse IPv4, hors adresse de réseau et de broadcast (sans les .0 et .255) : |
| <sxh powershell>"^(25[0-5]|2[0-4][0-9]|[1][0-9]?[0-9]?|[1-9][0-9]?)\.((25[0-5]|2[0-4][0-9]|[1]?[0-9]?[0-9])\.){2}(25[0-4]|2[0-4][0-9]|[1][0-9]?[0-9]?|[1-9][0-9]?)$"</sxh> | <sxh powershell>"^(25[0-5]|2[0-4]\d]|[1]\d?\d?|[1-9]\d?)\.((25[0-5]|2[0-4]\d|[1]?\d?\d)\.){2}(25[0-4]|2[0-4]\d|[1]\d?\d?|[1-9]\d?)$"</sxh> |
| |
| * Vérifier une adresse mail : | * Vérifier une adresse mail : |
| <sxh powershell>"^\w(\w|[.-])*@\w(\w|-)*(\.([a-z]){2,3}){1,2}$"</sxh> | <sxh powershell>"^\w*[.-]?\w*@\w(\w|-)*(\.([a-z]){2,3}){1,2}$"</sxh> |
| |
| --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2020/01/17 15:31// | |
| ~~DISCUSSION~~ | ~~DISCUSSION~~ |
| |