Expression régulière PHP

Expression régulière - Syntaxe

L'expression régulière décrit un modèle de correspondance de chaîne qui peut Il est utilisé pour vérifier si une chaîne contient un certaine sous-chaîne, remplacer la sous-chaîne correspondante ou extraire une sous-chaîne qui répond à une certaine condition d'une chaîne, etc.

Lors de la liste des répertoires, *.txt dans dir *.txt ou ls *.txt n'est pas une expression régulière, car la signification de * ici est différente de celle de * dans les expressions régulières.

Construire des expressions régulières revient à créer des expressions mathématiques. Autrement dit, de petites expressions peuvent être combinées pour créer des expressions plus grandes à l’aide d’une variété de métacaractères et d’opérateurs. Les composants d'une expression régulière peuvent être un caractère unique, une collection de caractères, une plage de caractères, une sélection entre des caractères ou toute combinaison de tous ces composants.

Les expressions régulières sont des modèles littéraux composés de caractères ordinaires (tels que les caractères de a à z) et de caractères spéciaux (appelés « métacaractères »). Un modèle décrit une ou plusieurs chaînes à rechercher lors de la recherche de texte. Les expressions régulières servent de modèle qui fait correspondre un modèle de caractères avec une chaîne recherchée.

Caractères normaux

Les caractères normaux incluent tous les caractères imprimables et non imprimables qui ne sont pas explicitement spécifiés comme métacaractères. Cela inclut toutes les lettres majuscules et minuscules, tous les chiffres, tous les signes de ponctuation et certains autres symboles.

Caractères non imprimables

Les caractères non imprimables peuvent également faire partie des expressions régulières. Le tableau suivant répertorie les séquences d'échappement représentant les caractères non imprimables :

QQ图片20161009132157.png

Caractères spéciaux

so- Les caractères spéciaux appelés caractères ont une signification particulière, comme le * dans "*.txt" mentionné ci-dessus, ils représentent la signification de n'importe quelle chaîne. Si vous souhaitez rechercher des fichiers avec * dans le nom de fichier, vous devez échapper au *, c'est-à-dire en ajouter un devant. ls*.txt.

De nombreux métacaractères nécessitent un traitement spécial lorsqu'on essaie de les faire correspondre. Pour faire correspondre ces caractères spéciaux, vous devez d'abord « échapper » les caractères, c'est-à-dire les précéder d'une barre oblique inverse (). Le tableau suivant répertorie les caractères spéciaux dans les expressions régulières :

QQ图片20161009132320.png

Qualificateur Le qualificatif

est utilisé pour spécifier combien de fois un composant donné d'une expression régulière doit apparaître pour satisfaire une correspondance. Il existe 6 types : * ou + ou ? ou {n} ou {n,} ou {n,m}.

Les qualificatifs d'expression régulière sont :

QQ图片20161009132434.png

Étant donné que le numéro de chapitre dépassera probablement neuf dans un document d'entrée volumineux, vous avez besoin d'un moyen de gérer deux ou trois -numéros de chapitre à chiffres. Les qualifications vous donnent cette capacité. L'expression régulière suivante correspond aux titres de chapitre numérotés avec n'importe quel nombre de chiffres :

/Chapter [1-9][0-9]*/

Notez que le qualificatif apparaît après le expression de plage. Par conséquent, cela s’applique à l’ensemble de l’expression de plage, dans ce cas, uniquement aux nombres de 0 à 9 inclus.

Le qualificatif + n'est pas utilisé ici car il n'est pas nécessairement nécessaire d'avoir un nombre en deuxième position ou en position suivante. Vous ne l'utilisez pas non plus ? caractères car il limite les numéros de chapitre à seulement deux chiffres. Vous devez faire correspondre au moins un chiffre après le chapitre et un espace.

Si vous savez que les numéros de chapitre sont limités à seulement 99 chapitres, vous pouvez utiliser l'expression suivante pour spécifier au moins un mais au plus deux chiffres.

/Chapitre [0-9]{1,2}/

L'inconvénient de l'expression ci-dessus est que les numéros de chapitre supérieurs à 99 ne correspondent toujours qu'aux deux premiers chiffres. Un autre inconvénient est que le chapitre 0 correspondra également. Une meilleure expression pour correspondre à seulement deux chiffres serait :

/Chapitre [1-9][0-9]?/

ou

/ Chapitre [ 1-9][0-9]{0,1}/

*, les qualificatifs + et ? sont gourmands car ils correspondront à autant de littéraux que possible, seulement si l'ajout d'un ? obtenir une correspondance non gourmande ou minimale.

Par exemple, vous pouvez rechercher dans un document HTML les titres de chapitre entourés de balises H1. Le texte ressemble à ceci dans votre document :

<H1>Chapitre 1 – Introduction aux expressions régulières</H1>

L'expression suivante correspond en commençant par le symbole inférieur à ( < Tout entre ;) et le signe supérieur à (>) qui ferme la balise H1.

/<.*>/

Si vous devez uniquement faire correspondre la balise d'ouverture H1, l'expression "non gourmande" suivante correspond uniquement à <H1>.

/<.*?>/

En plaçant ? après le qualificatif *, + ou ?, l'expression est convertie d'une expression « gourmande » en une expression « non -expression "gloutonne" Expression gourmande ou correspondance minimale.

localisateur

Le localisateur

vous permet d'épingler une expression régulière au début ou à la fin d'une ligne. Ils vous permettent également de créer des expressions régulières qui apparaissent dans un mot, au début ou à la fin d'un mot. Le localisateur

est utilisé pour décrire la limite d'une chaîne ou d'un mot, ^ et $ font respectivement référence au début et à la fin de la chaîne, b décrit la limite avant ou arrière d'un mot et B représente un limite non-verbale.

Les qualificatifs pour les expressions régulières sont :

QQ图片20161009132535.png

Remarque : les qualificatifs ne peuvent pas être utilisés avec des points d'ancrage. Puisqu'il ne peut y avoir plus d'une position immédiatement avant ou après une nouvelle ligne ou une limite de mot, les expressions telles que ^* ne sont pas autorisées.

Pour faire correspondre le texte au début d'une ligne de texte, utilisez le caractère ^ au début de l'expression régulière. Ne confondez pas cette utilisation de ^ avec l’utilisation d’expressions entre crochets.

Pour faire correspondre le texte à la fin d'une ligne de texte, utilisez le caractère $ à la fin de l'expression régulière.

Pour utiliser des points d'ancrage lors de la recherche de titres de chapitre, l'expression régulière suivante correspond à un titre de chapitre qui ne contient que deux chiffres de fin et apparaît au début de la ligne :

/^ Chapitre [1 -9][0-9]{0,1}/

Non seulement le véritable titre du chapitre apparaît au début de la ligne, mais c'est aussi le seul texte de la ligne. Il apparaît à la fois en début et en fin de ligne. L'expression suivante garantit que la correspondance spécifiée correspond uniquement aux chapitres et non aux références croisées. Vous pouvez le faire en créant une expression régulière qui correspond uniquement au début et à la fin d'une ligne de texte.

/^Chapitre [1-9][0-9]{0,1}$/

correspond aux limites des mots légèrement différemment, mais ajoute beaucoup aux capacités importantes de l'expression régulière . Les limites des mots sont les positions entre les mots et les espaces. Une limite non-verbale est toute autre position. L'expression suivante correspond aux trois premiers caractères du mot Chapitre car ces trois caractères apparaissent après une limite de mot :

/bCha/

La position des caractères b est très importante. Il recherche une correspondance au début du mot si elle se trouve au début de la chaîne à rechercher. Si c'est à la fin de la chaîne, il recherche une correspondance à la fin du mot. Par exemple, l'expression suivante correspond à la chaîne ter dans le mot Chapitre car elle apparaît avant une limite de mot :

/terb/

L'expression suivante correspond à la chaîne dans Chapitre La chaîne apt, mais ne correspond pas à la chaîne apt dans aptitude :

/Bapt/

La chaîne apt apparaît à une limite autre qu'un mot dans le mot Chapitre, mais n'apparaît pas à une limite de mot À la limite de mot dans aptitude. Pour l'opérateur de limite de non-mot B, la position n'a pas d'importance car la correspondance ne se soucie pas de savoir s'il s'agit du début ou de la fin d'un mot.

Sélectionner

Placez toutes les sélections entre parenthèses et séparez les sélections adjacentes par |. Mais l'utilisation de parenthèses aura un effet secondaire, c'est-à-dire que les correspondances associées seront mises en cache. Dans ce cas, vous pouvez utiliser ?: avant la première option pour éliminer cet effet secondaire.

Parmi eux, ?: est l'un des éléments non capturants, et les deux autres éléments non capturants sont ?= et ?!. Ces deux-là ont plus de significations. Le premier est une recherche directe, et il commence à correspondre. n'importe quelle parenthèse. Le modèle d'expression régulière correspond à la chaîne de recherche à n'importe quelle position qui ne correspond pas au modèle d'expression régulière, ce qui est une anticipation négative et correspond à la chaîne de recherche à n'importe quelle position de début qui ne correspond pas au modèle d'expression régulière.

Références arrière

L'ajout de parenthèses autour d'un modèle d'expression régulière ou d'une partie d'un modèle entraînera le stockage de la correspondance associée dans un tampon temporaire, chaque sous-correspondance étant capturée comme spécifié dans le modèle d'expression régulière. Les expressions sont stockées dans l'ordre dans lequel elles apparaissent de gauche à droite. Les numéros de tampon commencent à 1 et peuvent stocker jusqu'à 99 sous-expressions capturées. Chaque tampon est accessible à l'aide de « n », où n est un nombre décimal à un ou deux chiffres qui identifie un tampon particulier.

Les captures peuvent être annulées en utilisant les métacaractères non capturants '?:', '?=' ou '?!', en ignorant la sauvegarde des correspondances associées.

L'une des applications les plus simples et les plus utiles des références arrière est la possibilité de trouver des correspondances entre deux mots adjacents identiques dans le texte. Prenons l'exemple de la phrase suivante :

Le coût de l'essence augmente-t-il ?

La phrase ci-dessus comporte évidemment plusieurs mots répétés. Ce serait bien de trouver un moyen de localiser cette phrase sans avoir à chercher les répétitions de chaque mot. L'expression régulière suivante utilise une seule sous-expression pour y parvenir :

/b([a-z]+) 1b/gi

capture l'expression tout comme [a-z] + Specified, y compris une ou plusieurs lettres. La deuxième partie de l'expression régulière est une référence à une sous-correspondance précédemment capturée, c'est-à-dire la deuxième occurrence du mot correspondant exactement à l'expression entre crochets. 1 spécifie la première sous-correspondance. Les métacaractères de limite de mot garantissent que seuls les mots entiers sont détectés. Sinon, des expressions telles que « est émis » ou « ceci est » ne seront pas correctement reconnues par cette expression.

La balise globale (g) après l'expression régulière indique que l'expression doit être appliquée à autant de correspondances que l'on peut trouver dans la chaîne d'entrée. La balise insensible à la casse (i) à la fin de l'expression spécifie l'insensibilité à la casse. Les balises multilignes spécifient les correspondances potentielles qui peuvent se produire de chaque côté des caractères de nouvelle ligne.

Les références arrière décomposent également un indicateur de ressources universel (URI) en ses composants. Supposons que vous souhaitiez diviser l'URI suivant en protocole (ftp, http, etc.), adresse de domaine et page/chemin :

http://www.php.cn:80/html/html-tutorial. html

L'expression régulière suivante fournit cette fonctionnalité :

/(w+)://([^/:]+)(:d*)?([^# ] *)/

La première sous-expression entre crochets capture la partie protocolaire de l'adresse Web. Cette sous-expression correspond à n’importe quel mot précédé de deux points et de deux barres obliques. La deuxième sous-expression entre parenthèses capture la partie adresse de domaine de l'adresse. La sous-expression correspond à un ou plusieurs caractères sauf / et :. La troisième sous-expression entre parenthèses capture le numéro de port (s'il est spécifié). Cette sous-expression correspond à zéro ou plusieurs chiffres après les deux points. Cette sous-expression ne peut être répétée qu'une seule fois. Enfin, la quatrième sous-expression entre parenthèses capture les informations de chemin et/ou de page spécifiées par l'adresse Web. Cette sous-expression correspond à toute séquence de caractères qui n'inclut pas le caractère # ou espace.

En appliquant l'expression régulière à l'URI ci-dessus, chaque sous-correspondance contient les éléments suivants :

La première sous-expression entre crochets contient "http"

La seconde La première sous-expression entre crochets contient "www .php.cn"

La troisième sous-expression entre crochets contient ":80"

La quatrième sous-expression entre crochets contient "../html /html-tutorial.html"

Pour plus de connaissances sur les expressions régulières, voir http://php.cn/regexp/regexp-tutorial.html

Plus d'expressions régulières Pour des exemples de formule, voir http://www.cnblogs .com/diony/archive/2010/12/16/1908499.html

Formation continue
||
//登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串 function isRegisterUserName(s) { var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/; if (!patrn.exec(s)) return false return true }
soumettreRéinitialiser le code
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!