Maison >développement back-end >tutoriel php >Expressions régulières PHP POSIX

Expressions régulières PHP POSIX

藏色散人
藏色散人avant
2019-12-04 10:31:312305parcourir

1 Connaissances de base

L'expression régulière est une manière de décrire un modèle de texte. La correspondance exacte (littérale) que nous avons utilisée jusqu'à présent est également une expression régulière. Par exemple, nous avons précédemment recherché des termes d'expression régulière tels que « boutique » et « livraison ».

En PHP, la correspondance d'expressions régulières ressemble plus à une correspondance strstr() qu'à une comparaison d'égalité, car elle se trouve à une certaine position dans une chaîne (si elle n'est pas spécifiée, elle peut être n'importe où dans la position de la chaîne) une autre chaîne. Par exemple, la chaîne « shop » correspond à l'expression régulière « shop ». Il peut également correspondre aux expressions régulières « h », « ho », etc.

En plus de faire correspondre exactement les caractères, vous pouvez également utiliser des caractères spéciaux pour spécifier la méta-signification d'une expression. Par exemple, à l'aide de caractères spéciaux, vous pouvez spécifier un modèle qui doit exister au début ou à la fin d'une chaîne, qu'une partie du modèle peut être répétée ou que les caractères du modèle appartiennent à un type spécifique. De plus, vous pouvez faire une correspondance par occurrence de caractères spéciaux. Ensuite, nous discuterons de ces changements un par un.

2 Jeux et classes de caractères

L'utilisation de jeux de caractères peut immédiatement fournir des expressions régulières plus puissantes que la correspondance exacte. Les jeux de caractères peuvent être utilisés pour correspondre à n’importe quel caractère d’un type spécifique ; en fait, ils constituent une sorte de caractère générique.

Tout d'abord, vous pouvez utiliser un caractère comme caractère générique pour remplacer n'importe quel caractère à l'exception du caractère de nouvelle ligne (n). Par exemple, l'expression régulière :

.at

peut correspondre à "cat", "sat", "mat", etc. En règle générale, cette correspondance par caractère générique est utilisée pour la correspondance des noms de fichiers dans les systèmes d'exploitation.

Cependant, en utilisant des expressions régulières, vous pouvez être plus précis sur le type de caractères que vous souhaitez faire correspondre, et vous pouvez spécifier un ensemble auquel appartiennent les caractères. Dans l'exemple précédent, l'expression régulière correspondait à "cat" et "mat", mais elle pouvait également correspondre à "#at". Si vous souhaitez le limiter aux caractères compris entre a et z, vous pouvez le spécifier comme ceci :

[a-z]at

Tout ce qui est contenu entre crochets ([]) est une classe de caractères - un caractère correspondant Le jeu de caractères auquel il appartient . Notez que l’expression entre crochets ne correspond qu’à un seul caractère.

On peut lister un ensemble, par exemple :

[aeiou]

peut être utilisé pour représenter des consonnes voyelles.

peut également décrire une plage, comme auparavant avec un trait d'union, ou un ensemble de plages :

[a-zA-Z]

Cet ensemble de plages représente n'importe quelle lettre majuscule ou minuscule.

De plus, les ensembles peuvent également être utilisés pour indiquer que les personnages n'appartiennent pas à un certain ensemble. Par exemple :

[^a-z]

peut être utilisé pour faire correspondre n'importe quel caractère qui n'est pas compris entre a et z. Lorsque le curseur (^) est placé entre crochets, cela signifie non. Lorsque ce symbole est utilisé en dehors des crochets, cela signifie une autre signification, que nous présenterons en détail plus tard.

3 répétitions

Souvent, les lecteurs voudront indiquer qu'une certaine chaîne ou classe de caractères apparaîtra plus d'une fois. Vous pouvez utiliser deux caractères spéciaux à la place dans les expressions régulières. Le symbole « * » indique que le motif peut être répété 0 fois ou plus, et le symbole « + » indique que le motif peut être répété 1 ou plusieurs fois. Ces deux symboles doivent être placés après l’expression sur laquelle agir.

Par exemple :

[[:alnum:]]+

signifie "au moins un caractère alphabétique".

4 Sous-expressions

Habituellement, il est très utile de séparer une expression en plusieurs sous-expressions. Par exemple, cela peut signifier "Au moins ces chaînes One doivent être un. correspondance exacte". Cela peut être fait en utilisant des parenthèses, de la même manière que dans les expressions mathématiques.

Par exemple :

(very)*large

peut correspondre à "grand", "très grand", "très très grand", etc.

5 Le nombre de sous-expressions

peut être utilisé comme expression numérique entre accolades ({}) pour spécifier le nombre de fois où le contenu peut être répété. Vous pouvez spécifier un nombre exact de répétitions ({3} signifie des répétitions 3 fois), ou une plage de répétitions ({2, 4} signifie des répétitions 2 à 4 fois), ou une plage de répétitions à fond ouvert ({2, 4} signifie répétitions 2 à 4 fois). } signifie répéter au moins deux fois).

Par exemple :

(very){1,3}

signifie correspondre "très", "très très" et "très très très".

6 Positionnement au début ou à la fin d'une chaîne

Le motif [a-z] correspondra à toute chaîne contenant des caractères alphabétiques minuscules. Peu importe que la chaîne ne contienne qu'un seul caractère ou qu'elle contienne un seul caractère correspondant dans toute la chaîne la plus longue.

Il est également possible de déterminer si une sous-expression spécifique apparaît au début, à la fin ou aux deux positions. Ceci est utile lorsque vous souhaitez vous assurer que seul le mot que vous recherchez et aucun autre mot n'apparaît dans une chaîne.

Le caret (^) est utilisé au début de l'expression régulière, indiquant que la sous-chaîne doit apparaître au début de la chaîne recherchée, et le caractère "$" est utilisé à la fin de l'expression régulière , indiquant que la sous-chaîne doit apparaître à la fin de la chaîne.

Par exemple, les correspondances suivantes bob au début de la chaîne :

^bob

Ce modèle correspondra aux chaînes où com apparaît à la fin de la chaîne :

com$

Enfin , ce modèle correspondra aux chaînes contenant un seul caractère entre a et z :

^[a-z]$

7 branches

可以使用正则表达式中的一条竖线来表示一个选择。例如,如果要匹配com、edu或net,就可以使用如下所示的表达式:

com|edu|net

8 匹配特殊字符

如果要匹配本节前面提到过的特殊字符,例如,.、{或者$,就必须在它们前面加一个反斜杠(\)。如果要匹配一个反斜杠,则必须用两个反斜杠(\\)来表示。

在PHP中,必须将正则表达式模式包括在一个单引号字符串中。使用双引号引用的正则表达式将带来一些不必要的复杂性。PHP还使用反斜杠来转义特殊字符——例如反斜杠。

如果希望在模式中匹配一个反斜杠,必须使用两个反斜杠来表示它是一个反斜杠字符,而不是一个转义字符。

同样,由于相同的原因,如果希望在一个双引号引用的PHP字符串中使用反斜杠字符,必须使用两个反斜杠。这可 能会有些混淆,这样要求的结果将是表示一个包含了反斜杠字符的正则表达式的一个PHP字符串需要4个反斜杠。PHP解释器将这4个反斜杠解释成2个。然 后,由正则表达式解释器解析为一个。

$符号也是双引号引用的PHP字符串和正则表达式的特殊字符。要使一个$字符能够在模式中匹配,必须使用“\\\$”。因为这个字符串被引用在双引号中,PHP解释器将其解析为\$,而正则表达式解释器将其解析成一个$字符。

9 在智能表单中应用

在智能表单应用程序中,正则表达式至少有两种用途。第一种用途是在顾客的反馈中查找特定的名词。使用正则表达 式,可以做得更智能一些。使用一个字符串函数,如果希望匹配"shop"、"customer service"或"retail",就必须做3次不同的搜索。如果使用一个正则表达式,就可以同时匹配所有3个,如下所示:

shop|customer service|retail

第二个用途是验证程序中用户的电子邮件地址,这需要通过用正则表达式来对电子邮件地址的标准格式进行编码。这 个格式中包含一些数字或标点符号,接着是符号“@”,然后是包括文字或数字和字符组成的字符串,后面接着是一个“.”(点号),后面包括文字或数字以连字 符组成的字符串,可能还有更多的点号,直到字符串结束,它的编码如下所示:

^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$

子表达式^[a-zA-Z0-9_\-.]+表示“至少由一个字母、数字、下画线、连字符、点号或者这些字符组合为开始的字符串”。请注意,当在一个字符类的开始或末尾处使用点号时,点号将失去其特殊通配符的意义,只能成为一个点号字符。

符号“@”匹配字符“@”。

而子表达式[a-zA-Z0-9\-]+与包含文字数字字符和连字符的主机名匹配。请注意,我们去除了连字符,因为它是方括号内的特殊字符。

字符组合“\.”匹配“.”字符。我们在字符类外部使用点号,因此必须对其转义,使其能够匹配一个点号字符。

子表达式[a-zA-Z0-9\-\.]+$匹配域名的剩下部分,它包含字母、数字和连字符,如果需要还可包含更多的点号直到字符串的末尾。

不难发现,有时一个无效的电子邮件地址也会符合这个正则表达式。找到所有无效电子邮件几乎是不可能的,但是经 过分析,情形将会有所改善。可以按许多不同的方式精化这个表达式。例如,可以列出所有有效的顶级域(TLD)。当对某些对象进行限制的时候,请千万小心, 因为可能排斥1%的有效数据的校验函数比允许出现10%的无效数据的校验函数还要麻烦。

推荐:《PHP教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer

Articles Liés

Voir plus