Latest web development tutorials

Expressions régulières - règles de correspondance

pattern matching Basic

Tous Commençons par les bases. Le motif est une expression régulière est des éléments les plus élémentaires, qui sont caractérisés par une chaîne de description de groupe de caractères. Mode peut être très simple, constitué de chaînes ordinaires, peut aussi être très complexe, représentent souvent une série de caractères avec des caractères spéciaux, répétés, ou représente le contexte. Par exemple:

^once

Ce modèle contient un caractère spécial ^, ce qui indique que le motif correspond à une seule fois ceux qui commencent par la chaîne. Par exemple, la chaîne de motif "était une fois" correspondance ne correspond pas à "Il était une fois un homme de NewYork". En tant que tel symbole ^ indique le début de la même, $ symboles pour correspondre à celles des chaînes à la fin d'un mode donné.

bucket$

Le modèle et «Qui a gardé tout de cet argent dans un seau" correspondance ne correspond pas avec les "seaux". ^ Et caractères $ lorsqu'il est utilisé en même temps, elle représente une correspondance exacte (mode chaîne comme). Par exemple:

^bucket$

Matches seulement la chaîne "seau". Si un modèle ne comprend pas les ^ et $, il contient la chaîne pour correspondre à tout du motif. Par exemple: Mode

once

Avec chaîne

There once was a man from NewYork
Who kept all of his cash in a bucket.

Match.

Lettres (une fois) dans ce mode est un caractère littéral, qui est, ils ont dit la lettre elle-même, la figure est le même. Certains autres personnages un peu plus complexes, tels que des signes de ponctuation et les caractères blancs (espaces, tabulations, etc.), utiliser la séquence d'échappement. Toutes les séquences d'échappement en commençant par une barre oblique inverse (\). Tabs séquence d'échappement est: \ t. Donc, si nous voulons tester si une chaîne commençant par un onglet, vous pouvez utiliser ce mode:

^\t 

De même, représentée par \ n "nouvelle ligne", \ r retour chariot. D'autres symboles spéciaux peuvent être utilisés devant un antislash, comme le backslash lui-même avec \\ ladite période. Avec \. Représentation, et ainsi de suite.

cluster de caractères

Programme dans INTERNET, l'expression régulière est souvent utilisé pour valider les données utilisateur. Lorsqu'un utilisateur envoie un formulaire puis, entrez le numéro de téléphone que vous voulez juger, adresse, adresse email, numéro de carte de crédit est valide, avec le caractère général basé sur le littéral ne suffit pas.

Donc, pour utiliser un modèle plus libre pour décrire notre approche, ce sont les groupes de caractères. Pour créer une représentation de caractère de tous les amas de voyelle, mettre tout le caractère de voyelle dans un crochets:

[AaEeIiOoUu]

Ce modèle correspond à tous les caractères de voyelles, mais seulement représenter un caractère. Avec un trait d'union peut 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, celles-ci ne représentent un personnage, c'est un très important. Si vous voulez faire correspondre une lettre minuscule et un par un chaîne de nombres, tels que "z2", "t6" ou "g7", mais pas "AB2", "r2d3" ou "b52", puis utiliser ce modèle:

^[a-z][0-9]$

Bien que le [az] au nom des 26 lettres de la gamme, mais ici il est seul le premier caractère est en minuscule string assorti.

Comme mentionné précédemment ^ représente le début de la chaîne, mais il a aussi une autre signification. Lorsqu'il est utilisé dans un ensemble de crochets ^ est que cela signifie «pas» ou «exclusion» des moyens, souvent utilisés pour éliminer un caractère. Également utiliser l'exemple précédent, nous demandons premier caractère ne peut pas être un numéro:

^[^0-9][0-9]$

Ce mode "et 5", "g7" et "-2" est compensée, mais avec le "12", "66" est pas un match. Voici quelques exemples d'exclure des caractères spécifiques:

[^a-z] //除了小写字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了双引号(")和单引号(')之外的所有字符

Caractère spécial "." (point, arrêt complet) dans l'expression régulière utilisée pour représenter l'addition à la "nouvelle ligne" de tous les personnages. Donc, le modèle «^ .5 $» et deux caractères quelconques à la fin du numéro 5 et la chaîne de match dans un autre caractère non "nouvelle ligne" au début de. Mode "." Peut correspondre toute chaîne, en plus de la chaîne vide, et comprend seulement une «nouvelle ligne string".

PHP expression régulière a un peu intégré dans le cluster de caractère universel, la liste est la suivante:

字符簇 描述
[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何空白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

OK répétée

Jusqu'à présent, vous savez déjà comment faire correspondre une lettre ou un chiffre, mais plus de cas, vous voudrez peut-être correspondre à un mot ou un ensemble de nombres. Un mot a un certain nombre de lettres, un groupe de plusieurs figures en nombre impair. Avec le ou les caractères derrière le groupe d'accolades ({}) utilisée pour déterminer le nombre de répétitions du contenu précédent.

字符簇 描述
^[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 l'utilisation de trois entretoises différentes. Un certain nombre, {x} signifie "le ou les caractères en face de la grappe apparaît uniquement x fois", une virgule des nombres, {x,} signifie "le contenu apparaît devant le nombre de fois x ou plus"; deux avec virgule nombres séparés, {x, y} que «le contenu en face d'au moins apparaissent x fois, mais pas plus y fois." Nous pouvons étendre le modèle à d'autres mots ou des nombres:

^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]*$ //所有的正数 
^\-{0,1}[0-9]{1,}$ //所有的整数 
^[-]?[0-9]+\.?[0-9]+$ //所有的浮点数

Le dernier exemple est pas bien compris, est-ce pas? Alors Kanba: ([-]) (. \) Et le tout avec un signe moins optionnel Au début (^), suivi d'un ou plusieurs chiffres ([0-9] +), et un point décimal Parler sur un ou plusieurs chiffres ([0-9] +), et ne sont pas suivis par quelque chose d'autre ($). Ci-dessous, vous en saurez plus simple méthode peut être utilisée.

"?" Et les caractères spéciaux {0,1} sont égaux, ils représentent: "0 ou 1 devant» ou «en face du contenu est facultative." Alors que des exemples peuvent être simplifiés comme:

^\-?[0-9]{1,}\.?[0-9]{1,}$

caractères spéciaux "*" et {0,} sont égaux, ils représentent tous les "0 ou plus du contenu précédent". Enfin, les caractères «+» et {1} sont égaux, cela indique "1 ou plus du contenu précédent", de sorte que les quatre exemples ci-dessus peuvent être écrits comme suit:

^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 
^[0-9]+$ //所有的正数 
^\-?[0-9]+$ //所有的整数 
^\-?[0-9]*\.?[0-9]*$ //所有的浮点数

Bien sûr, cela ne réduit pas fondamentalement la complexité technique des expressions régulières, mais peut les rendre plus faciles à lire.