Expression régulière php comment trouver la dernière balise. Expressions régulières (modèles)

Les expressions régulières sont des modèles spéciaux permettant de rechercher des sous-chaînes dans un texte. Avec leur aide, vous pouvez résoudre les problèmes suivants en une seule ligne : « vérifiez s'il contient chaîne de chiffres", " retrouvez tout dans le texte adresses mail", "remplacez plusieurs points d'interrogation consécutifs par un seul."

Commençons par une sagesse de programmation populaire :

Certaines personnes, confrontées à un problème, pensent : « Oui, je suis intelligent, je vais le résoudre en utilisant des expressions régulières. » Maintenant, ils ont deux problèmes.

Exemples de modèles

Commençons par quelques exemples simples. La première expression dans l'image ci-dessous recherche une séquence de 3 lettres, où la première lettre est « k », la seconde est n'importe lequel. lettre russe et le troisième est un "t" insensible à la casse (par exemple, "cat" ou "CAT" correspond à ce modèle). La deuxième expression recherche l'heure dans le texte au format 12:34.

Toute expression commence par un caractère délimiteur. Le symbole / est généralement utilisé tel quel, mais vous pouvez également utiliser d'autres symboles qui n'ont pas d'utilité particulière dans les expressions régulières, par exemple ~, # ou @. Des délimiteurs alternatifs sont utilisés si le caractère / peut apparaître dans l'expression. Vient ensuite le motif de la chaîne que nous recherchons, suivi d'un deuxième délimiteur, et à la fin il peut y avoir une ou plusieurs lettres de drapeau. Ils demandent options additionelles lors de la recherche de texte. Voici des exemples de drapeaux :

  • i - indique que la recherche doit être insensible à la casse (sensible à la casse par défaut)
  • u - indique que l'expression et le texte recherchés utilisent le codage utf-8, et pas seulement des lettres latines. Sans cela, la recherche de caractères russes (et de tout autre caractère non latin) risque de ne pas fonctionner correctement, vous devez donc toujours la définir.

Le modèle lui-même se compose de caractères ordinaires et de constructions spéciales. Eh bien, par exemple, la lettre « k » dans les expressions régulières signifie elle-même, mais les symboles signifient « n'importe quel nombre de 0 à 5 peut être à cet endroit ». Ici liste complète caractères spéciaux (dans le manuel PHP, ils sont appelés métacaractères), et tous les autres caractères de la séquence régulière sont ordinaires :

Ci-dessous, nous analyserons la signification de chacun de ces caractères (et expliquerons également pourquoi la lettre « е » est placée séparément dans la première expression), mais pour l'instant essayons d'appliquer nos expressions régulières au texte et voyons ce qui se passe. Il y a en php fonction spéciale preg_match($regexp, $text, $match) , qui prend une expression régulière, du texte et un tableau vide en entrée. Il vérifie si le texte contient une sous-chaîne qui correspond au modèle donné et renvoie 0 sinon, ou 1 s'il y en a. Et dans le tableau transmis, la première correspondance trouvée avec la séquence régulière est placée dans l'élément d'index 0. Écrivons un programme simple qui applique des expressions régulières à différentes chaînes :

Après avoir regardé l'exemple, étudions les expressions régulières plus en détail.

Parenthèses dans les expressions régulières

Répétons ce qu'ils veulent dire différents types supports:

  • Croisillons a(1,5) précise le nombre de répétitions du caractère précédent - dans cet exemple, l'expression recherche 1 à 5 lettres consécutives « a »
  • Les crochets signifient « n'importe lequel de ces caractères », dans ce cas les lettres a, b, c, x, y, z ou un nombre de 0 à 5. D'autres caractères spéciaux comme | ne fonctionnent pas entre crochets. ou * - ils désignent un caractère régulier. S'il y a un caractère ^ entre crochets au début, alors la signification change à l'opposé : « n'importe quel caractère sauf ceux indiqués » - par exemple [^a-c] signifie « un N'importe quel caractère, sauf a, b ou c."
  • Les parenthèses regroupent les caractères et les expressions. Par exemple, dans l'expression abc+, le signe plus fait référence uniquement à la lettre c et cette expression recherche des mots comme abc, abcc, abccc. Et si vous mettez entre parenthèses a(bc)+, alors le quantificateur plus fait référence à la séquence bc et l'expression recherche les mots abc, abcbc, abbcbcc

Remarque : vous pouvez spécifier des plages de caractères entre crochets, mais n'oubliez pas que la lettre russe е est distincte de l'alphabet et que pour écrire « n'importe quelle lettre russe », vous devez écrire [a-яе].

Bexslashes

Si vous avez consulté d'autres didacticiels sur les expressions régulières, vous avez probablement remarqué que la barre oblique inverse est écrite différemment partout. Quelque part, ils écrivent une barre oblique inverse : \d , mais ici, dans les exemples, elle est répétée 2 fois : \\d . Pourquoi?

Le langage des expressions régulières vous oblige à écrire une barre oblique inverse une fois. Cependant, dans les lignes en simple et double citation en PHP, la barre oblique inverse a également une signification particulière : un manuel sur les chaînes. Eh bien, par exemple, si vous écrivez $x = "\$"; alors PHP traitera cela comme une combinaison spéciale et insérera uniquement le caractère $ dans la chaîne (et le moteur d'expression régulière ne connaîtra pas la barre oblique inverse qui le précède). Pour insérer la séquence \$ dans une chaîne, nous devons doubler la barre oblique inverse et écrire le code sous la forme $x = "\\$" ; .

Pour cette raison, dans certains cas (où la séquence de caractères a une signification particulière en PHP), nous sommes obligés de doubler la barre oblique inverse :

  • Pour écrire \$ dans une expression régulière, on écrit "\\$" dans le code
  • Pour écrire \\ dans une expression régulière, nous doublons chaque barre oblique inverse et écrivons "\\\\"
  • Pour écrire une barre oblique inverse et un nombre (\1) au format normal, vous devez doubler la barre oblique inverse : "\\1"

Dans d'autres cas, une ou deux barres obliques inverses donneront le même résultat : "\\d" et "\d" inséreront une paire de caractères \d dans la ligne - dans le premier cas, 2 barres obliques inverses sont la séquence d'insertion d'une barre oblique inverse. , dans le second cas il n'y a pas de séquence particulière et les caractères seront insérés tels quels. Vous pouvez vérifier quels caractères seront insérés dans une chaîne et ce que verra le moteur d'expression régulière en utilisant echo : echo "\$"; . Oui, c’est difficile, mais que pouvez-vous faire ?

Modèles spéciaux en saison régulière

  • \d recherche n'importe quel chiffre, \D - n'importe quel caractère sauf un chiffre
  • \w correspond à n'importe quelle lettre (de n'importe quel alphabet), chiffre ou trait de soulignement _ . \W correspond à n'importe quel caractère à l'exception d'une lettre, d'un chiffre ou d'un trait de soulignement.

Il existe également une condition pratique pour indiquer une limite de mot : \b . Cette construction signifie que d'un côté il doit y avoir un caractère qui est une lettre/un chiffre/un trait de soulignement (\w), et de l'autre côté il doit y avoir un caractère qui n'en est pas. Eh bien, par exemple, nous voulons trouver le mot « chat » dans le texte. Si nous écrivons l'expression régulière /cat/ui, alors il trouvera la séquence de ces lettres n'importe où - par exemple, à l'intérieur du mot « bétail ». Ce n’est clairement pas ce que nous souhaitions. Si nous ajoutons une condition limite de mot à l’expression régulière : /\bcat\b/ui , alors seul le mot autonome « ​​chat » sera recherché.

Manuel

) Je vous ai montré un exemple d'utilisation d'expressions régulières pour trouver des pièces spécifiques code source pages. Nous allons maintenant apprendre à les écrire nous-mêmes. Cette compétence vous aidera à écrire, à effacer le texte des fragments inutiles, à rechercher les parties nécessaires dans de gros volumes de texte, etc.

Ce sujet est assez compliqué, mais je vais essayer d'en aborder brièvement l'essentiel. les points importants. Je ne sais pas dans quelle mesure je réussirai, mais j'espère que la leçon sera utile.
Commençons donc par le fait qu'il existe plusieurs fonctions pour travailler avec des expressions régulières en PHP, mais trois sont le plus souvent utilisées :

  • preg_replace — recherche et remplace le texte correspondant à une expression régulière ;
  • preg_match - juste une recherche régulière ;
  • preg_split - recherche et fractionnement de texte.

Au moins, dans les leçons précédentes, nous les avons utilisés. Plus précisément, au lieu de preg_match il y avait preg_match_all, mais c'est essentiellement la même chose, seul ce dernier n'interrompt pas la recherche après la première découverte. Autrement dit, si nous utilisons preg_match, nous ne trouverons pas toutes les occurrences, mais seulement la première.

Choisir quelle fonction utiliser dans quelle situation est assez simple. Nous devons remplacer - nous utilisons replace, comme dans le cas où nous devions supprimer des parties inutiles du code de la page, vous vous souvenez ?

$page = preg_replace("/ ^]/i", "", $page); $page = preg_replace("/ ^]/i", "", $page); $page = str_replace("", "", $page);

Le premier paramètre de la fonction est un caractère régulier qui détermine ce que nous recherchons. La seconde est par quoi nous le remplaçons. Troisièmement – ​​Où regardons-nous ? Par conséquent, nous avons pris ici la variable $page et lui avons attribué le résultat de la fonction preg_replace où nous avons recherché tous les types d'entrée=case à cocher, ainsi que les étiquettes d'ouverture et de fermeture. Ils les ont remplacés par ", c'est-à-dire qu'ils les ont simplement supprimés. J'espère que tout est clair ici. Nous passerons un peu plus tard à l'analyse de l'expression elle-même (le premier paramètre de la fonction).
Il y avait aussi un exemple d'utilisation de preg_match_all, qui était utile pour trouver tous les liens dans le texte restant. Nous avions alors besoin de liens car ils contenaient mots clés, que nous avons analysé. Voici ce qui s'est passé :

Preg_match_all("/ ]+?>(.*?)<\/a>/uis",$page,$ok); pour ($j=0; $j ".$ok[$j].""; }

Le premier paramètre est encore une fois une expression régulière pour trouver tous les liens qui sont naturellement inclus dans la balise « a » (si vous n'êtes pas familier avec le balisage HTML, alors lisez). La seconde est une variable qui contient le texte qui sera recherché. Le troisième paramètre est une variable dans laquelle le résultat est placé - $ok. Après cela, il ne reste plus qu'à parcourir tous les éléments nécessaires de $ok pour obtenir les captures clés dont nous avons besoin. Séparément, il faut dire qu'en sortie nous obtenons un tableau multidimensionnel. C'est pourquoi nous l'avons affiché d'une manière si complexe : $ok[$j]. Pour visualiser la structure du tableau, utilisez la fonction ci-dessous et vous comprendrez tout.

Print_r($ok);

Il semble que nous ayons réglé les fonctions que nous avons utilisées pour notre travail. Il ne reste plus qu'à apprendre à écrire ces mêmes expressions régulières, qui sont le premier paramètre de chacune de ces méthodes. Passons au plus important.

Comment écrire des phrases régulières

Examinons d’abord les structures de base. Les expressions ont des options. Ils sont précisés par une lettre et écrits à la fin, précédés d'une barre oblique.

De plus, les métacaractères suivants sont pris en charge :

Les métacaractères, à leur tour, peuvent avoir des modificateurs :

Eh bien, nous pouvons maintenant passer à l’analyse de nos schémas habituels de la dernière leçon. Sur la base des signes ci-dessus, essayons de comprendre ce que nous avons. Voici l'expression :

/^]/je

Les première et dernière barres obliques « / » indiquent qu'elles contiennent une expression régulière. En même temps, après le dernier, nous mettons «i», c'est une option, comme dans le premier tableau - ne tenez pas compte de la casse. À l’intérieur des barres obliques se trouve la séquence régulière elle-même. Cela commence par le signe moins que et la balise d'entrée, et tout ce qui suit jusqu'au signe point n'est qu'un texte brut à rechercher. Mais le point lui-même et les symboles qui le suivent sont plus intéressants. Dans ce cas, la construction « .* ? désigne toute séquence de caractères. Autrement dit, si nous combinons uniquement le texte et cette construction, alors nous sélectionnerons tout le texte après la première occurrence et jusqu'à la fin. Pour vous arrêter, vous devez rencontrer soit une balise HTML de fermeture « plus que » soit un caractère de nouvelle ligne. Cette conception nous offre justement une telle opportunité :

Les caractères entre crochets sont reliés par un OU logique. La fin est le signe supérieur à OU le début de la ligne.
C'est toute l'expression, nous y définissons la condition de début, la condition du milieu et la condition de fin. Pas difficile, non ? Voici une illustration pour plus de clarté :

Regardons encore une chose pour tout solidifier. Nous avons recherché des liens avec eux :

/]+?>(.*?)<\/a>/uis

Nous lisons l'expression. Encore une fois, nous supprimons d'abord les barres obliques et les options. Les indicateurs "uis" sont explicites, à l'exception de "u", que je n'ai pas décrit - cela montre que nous utilisons le codage Unicode. Il ne reste plus grand chose. Le début est la balise "a", qui s'ouvre, puis vient la classe

ce qui signifie PAS supérieur ou inférieur à (balises HTML d'ouverture et de fermeture), c'est-à-dire aucun caractère dans ce cas. Un « + ? » est ajouté à la classe, ce qui signifie que cette classe sera présente 1 ou plusieurs fois (mais au moins 1 fois bien sûr). Et puis vient la balise html de fermeture pour la balise « a ». Il y a du texte à l'intérieur du lien spécifié par le groupe

Après tout, nous ne savons pas quel type de texte il y aura, nous définissons donc un tel groupe. Et à la fin il y a une balise fermante « a » :

Veuillez noter que nous évitons la barre oblique en utilisant une barre oblique inverse afin qu'elle soit perçue comme un simple texte.

Phew. Le sujet est vraiment assez complexe, il demande de la pratique. Peut-être que je ne fais pas quelque chose de manière tout à fait optimale et qu'il est possible de créer d'autres expressions régulières plus correctes, mais je suis aussi autodidacte que vous, alors ne jugez pas strictement, mais partagez plutôt vos options dans les commentaires. Aussi, si quelque chose n’est pas clair, la page commentaires et contact sont à votre service.

Lorsqu'ils travaillent avec des textes dans n'importe quel langage de programmation moderne, les développeurs sont constamment confrontés aux tâches consistant à vérifier la conformité des données saisies avec le modèle souhaité, à rechercher et à remplacer des fragments de test et à d'autres opérations typiques de traitement des informations symboliques. Développer vos propres algorithmes de vérification entraîne une perte de temps, une incompatibilité du code du programme et une complexité dans son développement et sa modernisation.

Le développement rapide des langages de développement Internet et WEB a nécessité la création d'outils universels et compacts pour traiter les informations textuelles avec un minimum de code requis pour cela. Le langage PHP, populaire auprès des développeurs débutants et professionnels, ne fait pas exception. L'expression régulière en tant que langage de modèle de texte vous permet de simplifier les tâches de traitement de texte et de réduire le code du programme de dizaines et de centaines de lignes. De nombreux problèmes ne peuvent être résolus sans cela.

Expressions régulières en PHP

Le langage PHP contient trois mécanismes pour travailler avec des expressions régulières - « ereg », « mb_ereg » et « preg ». La plus courante est l'interface "preg", dont les fonctions donnent accès à la bibliothèque d'expressions régulières PCRE, initialement développée pour le langage Perl, incluse avec PHP. Les fonctions Preg recherchent dans une chaîne de texte donnée des correspondances selon un modèle spécifique dans le langage d'expression régulière.

Bases de la syntaxe

Dans un court article, il est impossible de décrire en détail toute la syntaxe des expressions régulières ; il existe une littérature spéciale à ce sujet. Nous présentons uniquement les éléments principaux pour montrer les larges possibilités pour le développeur et comprendre les exemples de code.

B est formellement défini d’une manière très complexe, simplifions donc la description. Une expression régulière est une chaîne de texte. Il se compose d'un motif délimité et d'un modificateur indiquant comment le traiter. Il est possible d'inclure diverses alternatives et répétitions dans les modèles.

Par exemple, dans l'expression /\d(3)-\d(2)-\d(2)/m le séparateur sera «/» , puis vient le motif et le symbole "m" sera un modificateur.

Toute la puissance des expressions régulières est codée à l’aide de métacaractères. Le métacaractère principal du langage est la barre oblique inverse - "\". Il inverse le type du caractère qui le suit (c'est-à-dire qu'un caractère normal devient un métacaractère et vice versa). Un autre métacaractère important est la barre oblique « | », qui spécifie des variantes alternatives du modèle. Autres exemples de métacaractères :

PHP, lors du traitement des expressions régulières, traite l'espace comme un caractère significatif distinct, donc les expressions ABCWHERE et ABCWHERE sont différentes.

Sous-modèles

En PHP, les sous-modèles réguliers sont séparés par des parenthèses et sont parfois appelés « sous-expressions ». Effectuer les fonctions suivantes :

    Mettre en évidence les alternatives. Par exemple, modèle chaleur(quelque chose|oiseau|) correspond aux mots "chaleur", "oiseau de feu" Et "rôti". Et sans les parenthèses, ce ne serait qu'une chaîne vide, « oiseau » et « rôti ».

    Sous-modèle « passionnant ». Cela signifie que si une sous-chaîne correspond au modèle, toutes les correspondances sont renvoyées comme résultat. Pour plus de clarté, donnons un exemple. Étant donné l'expression régulière suivante : le gagnant reçoit((doré|doré)(médaille|coupe)) - et une ligne pour trouver des correspondances : "le gagnant reçoit une médaille d'or". En plus de la phrase originale, le résultat de la recherche renverra : "médaille d'or", "médaille", "or".

Opérateurs de répétition (quadrificateurs)

Lors de l’écriture d’expressions régulières, il est souvent nécessaire d’analyser les répétitions de nombres et de symboles. Ce n'est pas un problème s'il n'y a pas beaucoup de répétitions. Mais que faire quand on ne connaît pas leur nombre exact ? Dans ce cas, vous devez utiliser des métacaractères spéciaux.

Pour décrire les répétitions, des quadricateurs sont utilisés - des métasymboles pour spécifier la quantité. Les quadrificateurs sont de deux types :

  • général, entre parenthèses ;
  • abrégé.

Le quantificateur général spécifie le nombre minimum et maximum de répétitions autorisées d'un élément, exprimé sous la forme de deux nombres entre accolades, comme ceci : x(2,5). Si le nombre maximum de répétitions est inconnu, le deuxième argument est omis : x(2,).

Les quantificateurs abrégés représentent les symboles des répétitions les plus courantes afin d'éviter un encombrement syntaxique inutile. Trois abréviations sont couramment utilisées :

1. * - zéro ou plusieurs répétitions, ce qui équivaut à (0,).

2. + - une ou plusieurs répétitions, c'est-à-dire ,).

3. ? - zéro ou une seule répétition - (0,1).

Exemples d'expressions régulières

Pour ceux qui apprennent les expressions régulières, les exemples constituent le meilleur tutoriel. Nous en présenterons quelques-uns qui montrent leurs larges capacités avec un minimum d'effort. Tous les codes de programme sont entièrement compatibles avec les versions PHP 4.x et supérieures. Pour bien comprendre la syntaxe et utiliser toutes les fonctionnalités du langage, nous vous recommandons le livre « Regular Expressions » de J. Friedl, qui aborde en détail la syntaxe et contient des exemples d'expressions régulières non seulement en PHP, mais aussi pour Python, Perl, MySQL, Java, Ruby et C#.

Vérification de l'exactitude de l'adresse e-mail

Tâche. Il existe une page Internet qui demande au visiteur une adresse e-mail. L'expression régulière doit vérifier que l'adresse reçue est correcte avant d'envoyer des messages. Le contrôle ne garantit pas que la boîte aux lettres spécifiée existe réellement et accepte les lettres. Mais cela peut éliminer les adresses manifestement incorrectes.

Solution. Comme pour tout langage de programmation, les expressions régulières de vérification d'adresse e-mail PHP peuvent être implémentées de plusieurs manières, et les exemples de cet article ne sont pas la solution ultime. Par conséquent, dans chaque cas, nous fournirons une liste d'exigences qui doivent être prises en compte lors de la programmation, et la mise en œuvre spécifique dépend entièrement du développeur.

Ainsi, une expression qui vérifie si un email est valide doit vérifier les conditions suivantes :

  1. La présence du symbole @ dans la chaîne source et l'absence d'espaces.
  2. La partie domaine de l'adresse, suivie du symbole @, contient uniquement des caractères valides pour les noms de domaine. La même chose s'applique au nom d'utilisateur.
  3. Lors de la vérification d'un nom d'utilisateur, vous devez rechercher des caractères spéciaux tels qu'une apostrophe ou Ces caractères sont potentiellement dangereux et peuvent être utilisés dans des attaques telles que l'injection SQL. Évitez de telles adresses.
  4. Les noms d'utilisateur n'autorisent qu'un seul point, qui ne peut pas être le premier ou le dernier caractère de la ligne.
  5. Le nom de domaine doit contenir au moins deux et au maximum six caractères.

Un exemple prenant en compte toutes ces conditions est visible ci-dessous dans la figure.

Vérifier la validité des URL

Tâche. Vérifier si une chaîne de texte donnée est valide Encore une fois, les expressions régulières de vérification d'URL peuvent être implémentées de différentes manières.

Solution. Notre version finale ressemble à ceci :

/^(https?:\/\/)?([\da-z\.-]+)\.((2,6))([\/\w \.-]*)*\/?$ /

Examinons maintenant ses composants plus en détail à l'aide de la figure.

Vérification des numéros de carte de crédit

Tâche. Il est nécessaire de vérifier l'exactitude du numéro de carte plastifiée saisi pour les systèmes de paiement les plus courants. Option considérée pour les cartes uniquement

Solution. Lors de la création d'une expression, vous devez prendre en compte la présence éventuelle d'espaces dans le nombre saisi. Les chiffres sur la carte sont divisés en groupes pour faciliter la lecture et la dictée. Il est donc tout à fait naturel qu’une personne essaie de saisir le numéro de cette manière (c’est-à-dire en utilisant des espaces).

Écrire une expression universelle prenant en compte les espaces et les traits d’union possibles est plus difficile que de simplement supprimer tous les caractères à l’exception des chiffres. Par conséquent, il est recommandé d’utiliser le métacaractère /D dans l’expression, qui supprime tous les caractères à l’exception des chiffres.

Vous pouvez maintenant procéder directement à la vérification du numéro. Toutes les sociétés émettrices de cartes de crédit utilisent un format de numéro unique. L'exemple utilise ceci et le client n'a pas besoin de saisir le nom de l'entreprise - il est déterminé par le numéro. Les cartes Visa commencent toujours par 4 et comportent un numéro de 13 ou 16 chiffres. MasterCard commence dans la plage 51-55 avec une longueur de nombre de 16. En conséquence, nous obtenons l'expression suivante :

Avant de traiter une commande, vous pouvez effectuer une vérification supplémentaire du dernier chiffre du numéro, qui est calculé à l'aide de l'algorithme de Luhn.

Vérification des numéros de téléphone

Tâche. Vérification de l'exactitude du numéro de téléphone saisi.

Solution. Le nombre de chiffres des numéros de téléphone fixe et mobile varie considérablement d'un pays à l'autre. Il n'est donc pas possible de vérifier universellement qu'un numéro de téléphone est correct à l'aide d'expressions régulières. Mais les numéros internationaux ont un format strict et sont parfaits pour la vérification de modèles. Par ailleurs, de plus en plus d’opérateurs téléphoniques nationaux tentent de se conformer à une norme unique. La structure du numéro est la suivante :

+CCC.NNNNNNNNNNxEEEE, Où:

C est le code du pays, composé de 1 à 3 chiffres.

N - numéro comportant jusqu'à 14 chiffres.

E - extension facultative.

Le plus est un élément obligatoire et le signe x n'est présent que lorsque l'expansion est nécessaire.

En conséquence, nous avons l'expression suivante :

^\+(1,3)\.(4,14)(?:x.+)?$

Numéros à portée

Tâche. Vous devez faire correspondre un entier dans une plage spécifique. De plus, il est nécessaire que les expressions régulières correspondent uniquement aux nombres d'une plage de valeurs.

Solution. Voici quelques expressions pour quelques-uns des cas les plus courants :

Trouver une adresse IP

Tâche. Vous devez déterminer si la chaîne donnée est une adresse IP valide au format IPv4 dans la plage 000.000.000.000-255.255.255.255.

Solution. Comme pour toute tâche en PHP, les expressions régulières ont de nombreuses variantes. Par exemple, ceci :

Vérification d'expression en ligne

Tester l’exactitude des expressions régulières peut être difficile pour les nouveaux programmeurs en raison de la complexité de la syntaxe, qui diffère des langages de programmation « classiques ». Pour résoudre ce problème, il existe de nombreux testeurs d'expressions en ligne qui permettent de vérifier facilement l'exactitude de l'expression. de ce modèle sur du vrai texte. Le programmeur saisit l'expression et les données à tester et voit instantanément le résultat du traitement. Il existe généralement également une section de référence dans laquelle les expressions régulières, les exemples et les différences d'implémentation pour les langages de programmation les plus courants sont décrits en détail.

Mais faire entièrement confiance aux résultats des services en ligne n'est pas recommandé à tous les développeurs utilisant PHP. Une expression régulière, écrite et testée personnellement, améliore vos compétences et garantit l'absence d'erreurs.

L'utilisation la plus courante des expressions régulières en Perl concerne les opérateurs de recherche et de remplacement tels que s//, m/, opérateurs connectifs =~ ou != etc. En règle générale, tous ces opérateurs disposent d'options similaires telles que :

Généralement, toutes ces options sont désignées par "/x". Ils peuvent même être utilisés dans des modèles utilisant la nouvelle construction (?...)

Les expressions régulières ou modèles sont identiques aux procédures d'expression régulière sous Unix. Les expressions et la syntaxe sont empruntées aux procédures V8 distribuées gratuitement par Henry Spencer, où elles sont décrites en détail.

Les modèles utilisent les métacaractères suivants (caractères qui désignent des groupes d'autres caractères) souvent appelés standard egrep :

Les métacaractères ont des modificateurs (écrits après le métacaractère) :

Dans tous les autres cas, les accolades sont considérées comme des caractères ordinaires (réguliers). Ainsi "*" est équivalent à (0,) , "+" est (1,) et "?" - (0,1). n et m ne peuvent pas être supérieurs à 65 536.

Par défaut, les métacaractères sont gourmands. La correspondance est propagée autant de fois que possible, sans tenir compte de l'effet des métacaractères ultérieurs. Si vous souhaitez « réduire leur appétit », utilisez le symbole « ? ». Cela ne change pas la signification des métacaractères, cela réduit simplement la propagation. Ainsi:

Les caractères génériques fonctionnent de la même manière que les guillemets doubles, vous pouvez donc y utiliser des caractères `\` (caractères barre oblique inverse) :

\t - caractère de tabulation
\n - nouvelle ligne
\r - un retour chariot
\UN - traduction de formats
\v - tabulation verticale
\un - appel
\e - s'échapper
\033 - notation de symbole octal
\x1A - hexadécimal
\c[ - symbole de contrôle
\l - caractère suivant en minuscule
\u - majuscule -//-
\L - tous les caractères sont en minuscules jusqu'à \E
\U - Dans la partie supérieure -//-
\E - limiteur de changement de registre
\Q - annuler l'action en tant que métacaractère

De plus, les métacaractères suivants ont été ajoutés à Perl :

Notez qu'il ne s'agit que d'un seul caractère. Utilisez des modificateurs pour indiquer la séquence. Donc:

De plus, il existe des métacaractères imaginaires. Désignant des symboles inexistants à l'endroit où la valeur change. Tel que:

Une limite de mot (\b) est un point imaginaire entre les caractères \w et \W. Dans une classe de caractères, "\b" représente le caractère de retour arrière. Métacaractères \UN Et \Z- sont similaires à "^" et "$", mais si le début de la ligne "^" et la fin de la ligne "$" agissent pour chaque ligne d'une chaîne multiligne, alors \UN Et \Z indique le début et la fin d'une chaîne multiligne entière.

Si le regroupement (parenthèses) est utilisé dans le modèle, alors le numéro de sous-chaîne du groupe est désigné par "\digit". Notez que suivant un modèle dans une expression ou un bloc, ces groupes sont notés « $digit ». De plus, il existe des variables supplémentaires :

Exemple:

$s = "Un 1 deux 2 et trois 3" ; if ($s =~ /(\d+)\D+(\d+)/) ( print "$1\n"; # Résultat "1" print "$2\n"; # "2" print "$+\n" ; # "2" affiche "$&\n"; # "1 deux 2" affiche "$`\n"; # "Un " affiche "$"\n"; # " et trois 3" )

Perl version 5 contient des constructions de modèles supplémentaires :

Exemple:

$s = "1+2-3*4" ; if ($s =~ /(\d)(?=-)/) # Trouver le nombre suivi de "-" ( imprimer "$1\n"; # Résultat "2" ) else ( imprimer "erreur de recherche\n" ; )

(?!modèle) - « regarder » vers l'avenir par négation :

Exemple:

$s = "1+2-3*4" ; if ($s =~ /(\d)(?!\+)/) # Rechercher un chiffre qui n'est pas suivi de "+" ( imprimer "$1\n"; # Résultat "2" ) else ( imprimer "recherche erreur\ n"; )

(?ismx) - modificateurs « internes ». Il est pratique à utiliser dans les modèles, où, par exemple, vous devez spécifier un modificateur à l'intérieur du modèle.

Règles expression régulière. (expression régulière)

  1. Tout caractère se représente lui-même, sauf s'il s'agit d'un métacaractère. Si vous devez annuler l'effet d'un métacaractère, placez "\" devant celui-ci.
  2. La chaîne de caractères désigne une chaîne de ces caractères.
  3. L'ensemble des caractères possibles (classe) est mis entre crochets "", cela signifie qu'un des caractères précisés entre parenthèses peut apparaître à cet endroit. Si le premier caractère entre parenthèses est « ^ », alors aucun des caractères spécifiés ne peut apparaître à ce stade de l'expression. Au sein d'une classe, vous pouvez utiliser le symbole "-" pour désigner une plage de caractères. Par exemple, a-z est l'une des petites lettres de l'alphabet latin, 0-9 est un chiffre, etc.
  4. Forum du portail PHP. S.U.