Expression régulière - règles de correspondance
Correspondance de modèles de base
Tout commence par les bases. Les modèles sont les éléments les plus fondamentaux des expressions régulières. Ils constituent un ensemble de caractères qui décrivent les caractéristiques d'une chaîne. Les modèles peuvent être simples, constitués de chaînes ordinaires, ou très complexes, utilisant souvent des caractères spéciaux pour représenter une plage de caractères, des récurrences ou pour représenter le contexte. Par exemple :
^once
Ce modèle contient un caractère spécial ^, ce qui signifie que le modèle ne correspond qu'aux chaînes commençant par une fois. Par exemple, ce modèle correspond à la chaîne « il était une fois » mais ne correspond pas à « Il était une fois un homme de New York ». Tout comme le symbole ^ indique le début, le symbole $ est utilisé pour faire correspondre les chaînes qui se terminent par un modèle donné.
bucket$
Ce modèle correspond à "Qui a gardé tout cet argent dans un seau" mais pas aux "seaux". Lorsque les caractères ^ et $ sont utilisés ensemble, ils représentent une correspondance exacte (les chaînes sont identiques aux modèles). Par exemple :
^bucket$
correspond uniquement à la chaîne "bucket". Si un modèle n'inclut pas ^ et $, il correspond à n'importe quelle chaîne contenant le modèle. Par exemple : le motif
once
correspond à la chaîne
There once was a man from NewYork Who kept all of his cash in a bucket.
.
Les lettres (o-n-c-e) de ce modèle sont des caractères littéraux, c'est-à-dire qu'elles représentent les lettres elles-mêmes, tout comme les chiffres. D'autres caractères un peu plus complexes, comme la ponctuation et les caractères blancs (espaces, tabulations, etc.), nécessitent des séquences d'échappement. Toutes les séquences d'échappement commencent par une barre oblique inverse (). La séquence d'échappement pour le caractère de tabulation est : t. Donc, si nous voulons détecter si une chaîne commence par un caractère de tabulation, nous pouvons utiliser ce modèle :
^\t
De même, utilisez n pour représenter "nouvelle ligne" et r pour représenter le retour chariot. D'autres symboles spéciaux peuvent être utilisés avec une barre oblique inverse devant. Par exemple, la barre oblique inverse elle-même est représentée par \, le point est représenté par ., et ainsi de suite.
Cluster de caractères
Dans les programmes INTERNET, les expressions régulières sont généralement utilisées pour vérifier les entrées de l'utilisateur. Lorsqu'un utilisateur soumet un FORMULAIRE, il ne suffit pas d'utiliser des caractères littéraux ordinaires pour déterminer si le numéro de téléphone, l'adresse, l'adresse e-mail, le numéro de carte de crédit, etc. saisis sont valides.
Nous devons donc utiliser une manière plus libre de décrire le modèle que nous voulons, à savoir les groupes de caractères. Pour créer un cluster qui représente tous les caractères voyelles, placez tous les caractères voyelles entre crochets :
[AaEeIiOoUu]
Ce modèle correspond à n'importe quel caractère voyelle, mais ne peut représenter qu'un seul caractère. Les traits d'union peuvent être utilisés pour représenter une série de caractères, tels que :
[a-z] //匹配所有的小写字母 [A-Z] //匹配所有的大写字母 [a-zA-Z] //匹配所有的字母 [0-9] //匹配所有的数字 [0-9\.\-] //匹配所有的数字,句号和减号 [ \f\r\t\n] //匹配所有的白字符
De même, ceux-ci ne représentent également qu'un seul caractère, ce qui est très important. Si vous souhaitez faire correspondre une chaîne composée d'une lettre minuscule et d'un chiffre, telle que "z2", "t6" ou "g7", mais pas "ab2", "r2d3" ou "b52", utilisez ce modèle :
^[a-z][0-9]$
Bien que [a-z] représente une plage de 26 lettres, il ne peut ici correspondre qu'à des chaînes dont le premier caractère est une lettre minuscule.
Il a été mentionné plus tôt que ^ représente le début d'une chaîne, mais il a aussi une autre signification. Lorsque ^ est utilisé entre crochets, cela signifie « ne pas » ou « exclure » et est souvent utilisé pour éliminer un certain caractère. En reprenant l'exemple précédent, nous exigeons que le premier caractère ne puisse pas être un nombre :
^[^0-9][0-9]$
Ce modèle correspond à "&5", "g7" et "-2", mais ne correspond pas à "12", "66". "Ça ne correspond pas. Voici quelques exemples d'exclusion de caractères spécifiques :
[^a-z] //除了小写字母以外的所有字符 [^\\/\^] //除了(\)(/)(^)之外的所有字符 [^\"\'] //除了双引号(")和单引号(')之外的所有字符
Les caractères spéciaux "." (point, point) sont utilisés dans les expressions régulières pour représenter tous les caractères sauf "nouvelle ligne". Ainsi, le modèle "^.5$" correspond à toute chaîne de deux caractères se terminant par le chiffre 5 et commençant par un autre caractère autre que "nouvelle ligne". Le modèle "." peut correspondre à n'importe quelle chaîne, à l'exception des chaînes vides et des chaînes contenant uniquement une "nouvelle ligne".
Les expressions régulières de PHP ont des groupes de caractères communs intégrés, la liste est la suivante :
字符簇 | 描述 |
---|---|
[[:alpha:]] | 任何字母 |
[[:digit:]] | 任何数字 |
[[:alnum:]] | 任何字母和数字 |
[[:space:]] | 任何空白字符 |
[[:upper:]] | 任何大写字母 |
[[:lower:]] | 任何小写字母 |
[[:punct:]] | 任何标点符号 |
[[:xdigit:]] | 任何16进制的数字,相当于[0-9a-fA-F] |
Identifiez les éléments récurrents
À présent, vous le savez déjà Comment faire correspondre une lettre ou un chiffre, mais le plus souvent, il peut s'agir d'un mot ou d'un groupe de chiffres. Un mot est composé de plusieurs lettres et un groupe de nombres est constitué de plusieurs nombres singuliers. Les accolades ({}) qui suivent un caractère ou un groupe de caractères sont utilisées pour déterminer le nombre de fois que le contenu précédent est répété.
字符簇 | 描述 |
---|---|
^[a-zA-Z_]$ | 所有的字母和下划线 |
^[[:alpha:]]{3}$ | 所有的3个字母的单词 |
^a$ | 字母a |
^a{4}$ | aaaa |
^a{2,4}$ | aa,aaa或aaaa |
^a{1,3}$ | a,aa或aaa |
^a{2,}$ | 包含多于两个a的字符串 |
^a{2,} | 如:aardvark和aaab,但apple不行 |
a{2,} | 如:baad和aaa,但Nantucket不行 |
t{2} | 两个制表符 |
.{2} | 所有的两个字符 |
Ces exemples décrivent trois utilisations différentes des accolades. Un nombre, {x} signifie « le caractère ou le groupe de caractères précédent apparaît seulement x fois » ; un nombre plus une virgule, {x,} signifie « le contenu précédent apparaît x fois ou plus » ; ,y} signifie "le contenu précédent apparaît au moins x fois, mais pas plus de y fois". Nous pouvons étendre le modèle à plus de mots ou de chiffres :
^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 ^[1-9]{1,}$ //所有的正数 ^\-{0,1}[0-9]{1,}$ //所有的整数 ^[-]?[0-9]+\.?[0-9]+$ //所有的浮点数
Le dernier exemple n'est pas facile à comprendre, n'est-ce pas ? Regardez-le de cette façon : tout commence par un signe moins facultatif ([-]?) (^), suivi d'un ou plusieurs chiffres ([0-9]+) et suivi d'un point décimal (.) 1 ou plus de chiffres ([0-9]+) et non suivi de quoi que ce soit d'autre ($). Ci-dessous, vous découvrirez les méthodes les plus simples que vous pouvez utiliser.
Les caractères spéciaux "?" sont égaux à {0,1}, ils représentent tous deux : "0 ou 1 contenu précédent" ou "le contenu précédent est facultatif". Ainsi, l'exemple que nous venons de présenter peut être simplifié comme suit :
^\-?[0-9]{1,}\.?[0-9]{1,}$
Les caractères spéciaux "*" et {0,} sont égaux et représentent tous deux "0 ou plusieurs contenus précédents". Enfin, le caractère "+" est égal à {1,}, ce qui signifie "un ou plusieurs contenus précédents", donc les 4 exemples ci-dessus peuvent s'écrire ainsi :
^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 ^[0-9]+$ //所有的正数 ^\-?[0-9]+$ //所有的整数 ^\-?[0-9]*\.?[0-9]*$ //所有的浮点数
Bien sûr, ce n'est pas techniquement possible. Réduit la complexité des expressions régulières mais les rend plus faciles à lire.