PHP (regex) - qu'est-ce que c'est ? Exemples et validation d'expressions régulières. Expressions régulières (motifs)

) Je vous ai montré un exemple d'utilisation d'expressions régulières pour trouver des morceaux spécifiques du code source d'une page. Maintenant, nous allons 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 difficile, mais je vais essayer de souligner brièvement les points les plus importants. Je ne sais pas combien je peux le faire, mais j'espère que la leçon sera utile.
Ainsi, pour commencer, 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 à l'expression régulière ;
  • preg_match - juste une recherche régulière ;
  • preg_split - recherche et fractionne le texte.

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

Le choix dans quelle situation utiliser quelle fonction 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 une expression régulière, qui définit ce que nous recherchons. Le second est ce que nous remplaçons. Troisièmement - Où nous cherchons. Par conséquent, nous avons pris ici la variable de page $ et lui avons attribué le résultat de la fonction preg_replace, où nous avons recherché toutes les cases à cocher de type d'entrée =, ainsi que les étiquettes d'ouverture et de fermeture. Remplacés par ", c'est-à-dire qu'ils ont simplement été supprimés. J'espère que tout est clair ici. Nous passerons à l'analyse de l'expression elle-même (le premier paramètre de la fonction) un peu plus loin.
Il y avait aussi un exemple d'utilisation de preg_match_all, qui s'est avéré utile pour trouver tous les liens dans le reste du texte. Nous avions alors besoin de liens car c'était en eux que 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, encore une fois, est le régulier, pour trouver tous les liens, qui sont naturellement inclus dans la balise "a" (si vous n'êtes pas à l'aise avec le balisage html, alors lisez-le). La seconde est une variable qui contient le texte par lequel la recherche aura lieu. 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 $ ok nécessaires afin d'obtenir les keyfishes dont nous avons besoin. Séparément, il faut dire qu'en sortie on obtient un tableau multidimensionnel. C'est pourquoi nous l'affichons d'une manière si compliquée : $ ok [$ j]. Pour voir la structure du tableau, utilisez la fonction ci-dessous et vous comprendrez tout.

Print_r ($ ok);

Ici, semble-t-il, nous avons compris les fonctions que nous utilisions pour le travail. Reste maintenant à apprendre à écrire ces expressions très régulières, qui sont le premier paramètre de chacune de ces méthodes. Passons au plus important.

Comment écrire des habitués

Tout d'abord, examinons les constructions de base. Les expressions ont des options. Ils sont spécifié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 :

Bon, maintenant nous pouvons passer à l'analyse de nos habitués de la dernière leçon. Sur la base des tablettes ci-dessus, essayons de comprendre ce que nous avons. Voici l'expression :

/^] / je

La première et la dernière barre oblique "/" indiquent qu'il y a une expression régulière à l'intérieur. En même temps, après le dernier, nous mettons "i", c'est une option, comme dans le premier tableau - non sensible à la casse. À l'intérieur des barres obliques, la ligne régulière elle-même. Il commence par un signe inférieur à et une balise d'entrée, et tout ce qui suit jusqu'au signe point, qui est un texte simple à rechercher. Mais le point lui-même et les symboles qui le suivent - c'est déjà plus intéressant. Dans ce cas, la construction ". *?" signifie n'importe quelle séquence de caractères. Autrement dit, si vous combinez uniquement le texte et la construction donnée, nous sélectionnerons tout le texte après la première occurrence jusqu'à la fin. Pour arrêter, vous devez rencontrer soit la balise html de fermeture "supérieur à", soit le caractère de nouvelle ligne. Cette conception nous donne juste cette opportunité:

Les symboles entre crochets sont, pour ainsi dire, reliés par un OU logique. La fin est un signe supérieur à OU le début d'une ligne.
C'est toute l'expression, dans laquelle nous 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é :

Décomposons-en un de plus pour tout solidifier. Nous les avons recherchés pour les liens :

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

Nous lisons l'expression. Encore une fois, supprimez d'abord les barres obliques et les options. Les drapeaux "uis" sont compréhensibles, à l'exception du "u" que je n'ai pas décrit - cela indique que nous utilisons l'encodage Unicode. Il ne reste pas grand-chose. Le début est la balise "a", qui s'ouvre, puis vient la classe

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

Après tout, nous ne savons pas quel type de texte sera présent, nous définissons donc un tel groupe. Et à la fin, la balise de fermeture "a":

Veuillez noter que nous échappons à la barre oblique par une barre oblique inverse afin qu'elle soit perçue comme du texte brut.

Fuh. Le sujet est vraiment assez complexe, il faut de la pratique. Peut-être que je ne fais pas quelque chose de manière tout à fait optimale et que vous pouvez créer d'autres expressions régulières plus correctes, mais je suis le même autodidacte que vous, alors ne jugez pas strictement, mais partagez plutôt vos options dans les commentaires. De plus, si quelque chose n'est pas clair, des commentaires et une page de contact sont à votre disposition.


L'une des fonctionnalités très puissantes et utiles du langage PHP est sa prise en charge des expressions régulières. De nombreux programmeurs, débutants et assez expérimentés, sont intimidés par la complexité externe et la confusion du langage d'expression régulière. Mais je peux vous assurer que cela en vaut la peine. L'utilisation d'expressions régulières facilite grandement le travail de traitement de texte et de données mal structurées.


Les expressions régulières sont des expressions écrites dans un langage spécial. Ne vous inquiétez pas, la langue est assez simple à comprendre, seules l'expérience et la pratique sont nécessaires.


Je pense que vous avez rencontré à plusieurs reprises des situations où vous avez du texte (par exemple, dans Microsoft Word) et vous devez y trouver quelque chose d'important. Si vous savez exactement ce que vous cherchez, tout est simple : ils ont appelé la boîte de dialogue de recherche, ont entré le mot souhaité, ont appuyé sur le bouton et le tour est joué - le texte a été trouvé.


Mais que faire si vous ne connaissez à l'avance que le type d'informations que vous recherchez ? Par exemple, votre tâche consiste à trouver toutes les adresses e-mail dans quelques centaines de feuilles de document. Certains parcourront le document manuellement, d'autres rechercheront un chien (@) et le rechercheront. D'accord - les deux variantes sont un travail difficile, un travail ingrat.

C'est là que les expressions régulières viennent à la rescousse. Dans une certaine approximation, les expressions régulières peuvent être comparées à des masques ou à des motifs qui se superposent au texte : si le texte correspond au masque, alors c'est le fragment souhaité. Mais avant d'examiner l'utilisation des expressions régulières, nous allons examiner leur syntaxe.

Une expression régulière est une chaîne de texte composée selon certaines lois et règles. Une chaîne se compose de caractères et de groupes de caractères, de métacaractères, de quantificateurs et de modificateurs.

Dans ce cas, les symboles sont tous les symboles de n'importe quel alphabet. Et pas seulement lisibles. Vous pouvez facilement insérer un caractère illisible dans une expression, pour cela il vous suffit de connaître son code sous forme hexadécimale. Par exemple:

// caractères lisibles a Е // caractères et codes illisibles \ x41 - le même que la lettre "A" \ x09 - caractère de tabulation

Un groupe de caractères est une suite de caractères écrits dans l'ordre :

Abvg ACZms

J'attire tout de suite votre attention - l'"espace" dans les expressions régulières est également considéré comme un caractère significatif, alors soyez prudent lorsque vous écrivez des expressions. Par exemple, ces caractères grappa sont des expressions DIFFÉRENTES :

ABVGDE ABC O

L'élément de langage suivant est les métacaractères. Le préfixe "méta" signifie que ces symboles décrivent d'autres symboles ou leurs groupes. Le tableau présente les principaux métacaractères du langage d'expressions régulières :

Métacaractères pour spécifier des caractères spéciaux
() Supports. Définir des expressions imbriquées.
| Métacaractère de sélection
^ Métacaractère de début de ligne
$ Métacaractère de fin de ligne
\ n Caractère de saut de ligne (hex 0x0A)
\r Retour chariot (hex 0x0D)
\ t Caractère de tabulation (hex 0x09)
\ xhh Insérez un caractère avec le code hexadécimal 0xhh, par exemple \ x42 insèrera la lettre latine "B"
Métacaractères pour spécifier des groupes de caractères
. Point. N'importe quel caractère.
\ ré Chiffre (0-9)
\ RÉ Pas un chiffre (tout caractère autre que les caractères 0-9)
\ s Caractère vide (généralement espace et tabulation)
\ S Caractère non vide (tout sauf les caractères définis par le métacaractère \ s)
\ w Un caractère "dictionnaire" (un caractère utilisé dans les mots. Généralement toutes les lettres, tous les chiffres et un trait de soulignement ("_"))
\ W Tout sauf les caractères spécifiés par le métacaractère \ w

Les métacaractères de la seconde moitié du tableau sont très faciles à retenir. "d" est un chiffre (chiffre), "s" est un symbole (symbole), "w" est un mot (mot). Si la lettre est grande, vous devez ajouter « PAS » à la description du groupe.

Par exemple, prenons le texte "Le maillot rouge a les numéros 1812 et le maillot vert est 2009". Regardons des exemples des expressions régulières les plus simples :

\ d \ d \ d \ d - trouve 1812 et 2009 \ D - trouve toutes les lettres, espaces et signes de ponctuation \ s - trouve tous les espaces dans le texte.

Mais après tout, l'année dans notre exemple peut s'écrire non pas avec quatre, mais avec deux nombres, les mots peuvent avoir d'autres déclinaisons, etc. Les sous-ensembles de caractères, qui sont spécifiés à l'aide de crochets, peuvent être utiles ici :

Signifie n'importe quel chiffre (identique à \ d) - signifie un chiffre pair - désigne n'importe quel caractère de l'alphabet latin (dans tous les cas) ou chiffre.

Par exemple, l'expression \ d \ d \ d dans la ligne de test ne trouvera que 1812, mais pas 2009. Cette expression doit être lue comme "trouver toutes les séquences à quatre chiffres où le dernier chiffre est 0,2,4,6 ou 8".

Il suffit de mentionner les quantificateurs et les modificateurs.

Quantificateur est une construction spéciale qui détermine combien de fois un caractère ou un groupe de caractères doit apparaître. Le quantificateur est entouré d'accolades "()". Il existe deux formats d'enregistrement : exact et plage. Précis le format s'écrit comme ceci :

Ici, X est le nombre de fois que le caractère ou le groupe précédent doit être répété. Par exemple l'expression

La deuxième forme de notation est la plage. Écrit comme

(X, Y) // ou (, Y) // ou (X,)

où X est le minimum et Y est le nombre maximum de répétitions. Par exemple:

se lit comme "deux à quatre chiffres consécutifs". Si l'une des limites n'est pas spécifiée, aucune limitation n'est impliquée. Par exemple:

\ w (3,) - trois lettres ou plus. \ d (, 5) - il n'y a pas de chiffres du tout, ou il y a des chiffres, mais pas plus de cinq.

Les quantificateurs peuvent être appliqués à un seul caractère ou à un groupe :

[A-Ya-moi] (1,3)

Cette construction sélectionnera dans le texte tous les mots russes d'une, deux ou trois lettres (par exemple, "ou", "pas", "je", "je vais", etc.)

En plus des accolades c, il existe trois autres quantificateurs de métacaractères : "*" (astérisque), "+" (plus) et "?" (question). Ils sont utilisés dans les cas où le nombre minimum et maximum de répétitions requises n'est pas connu à l'avance. Par exemple, lors de la recherche d'adresses e-mail, vous ne pouvez pas dire à l'avance combien de caractères seront dans un nom d'utilisateur (avant "chien") et combien dans un nom de domaine (après "chien").

Le métacaractère "*" est lu comme "n'importe quel nombre à partir de zéro ou plus", c'est-à-dire conception

définit un nombre quelconque de lettres consécutives, y compris leur absence totale.

Le symbole "+" diffère de l'astérisque uniquement en ce qu'il requiert au moins un symbole. Celles. conception

correspond à n'importe quelle séquence numérique, où il y a un ou plusieurs chiffres.

Symbole "?" correspond à l'absence ou à la présence d'un seul caractère. Celles. conception

correspond à toute séquence numérique contenant un ou deux chiffres.

Il vaut la peine de mentionner ici une caractéristique des antiifiers "*" et "+" comme avidité... L'essentiel est que, par défaut, ces caractères correspondent à la séquence de caractères la plus longue possible. Par exemple, pour la ligne "Maman a lavé le cadre" l'expression :

choisirons "mama soap ra", ce qui est quelque peu inattendu, car nous étions censés obtenir "ma". Pour modifier ce comportement, utilisez le "?" (point d'interrogation), écrit immédiatement après le quantificateur. Il étouffe l'appétit des quantificateurs en les obligeant à rendre le premier match, pas le plus long. Modifions maintenant l'exemple précédent :

et nous obtenons la correspondance requise "ma".

Le dernier élément de la langue est modificateurs... Un modificateur est un caractère spécial qui définit les paramètres "système" de l'analyse des expressions régulières. Il n'y a que quatre de ces symboles, ils peuvent être utilisés à la fois individuellement et simultanément :

je Active le mode insensible à la casse, c'est-à-dire les lettres majuscules et minuscules ne diffèrent pas dans l'expression.
m Indique que le texte recherché doit être traité sur plusieurs lignes. Par défaut, le moteur d'expressions régulières traite le texte comme une seule chaîne, quelle qu'elle soit. En conséquence, les métacaractères "^" et "$" indiquent le début et la fin de tout texte. Si ce modificateur est spécifié, ils pointent respectivement vers le début et la fin de chaque ligne de texte.
s Le métacaractère par défaut est "." n'inclut pas de caractère de saut de ligne dans sa définition. Celles. pour le texte multiligne, l'expression /.+/ ne retournera que la première ligne, pas tout le texte comme prévu. La spécification de ce modificateur supprime cette limitation.
U Rend tous les métacaractères non gourmands par défaut. Dans certaines modifications du langage (notamment en PHP), à la place de "U", le caractère "g" est utilisé, ce qui est plus approprié pour le sens ("g" est une abréviation pour l'anglais "greedy", "greedy" ).

Le tableau présente les exemples d'expressions régulières les plus populaires et les plus utiles. Certains d'entre eux peuvent vous sembler compliqués et encombrants, mais avec une étude détaillée, vous le comprendrez sans aucun doute.

Expressions régulières en PHP.

Il existe des fonctions spéciales pour travailler avec des expressions régulières en PHP, dont la liste et une brève description sont données dans le tableau :

int preg_match (modèle de chaîne, objet de chaîne [, correspondances de tableau])

La fonction vérifie si le contenu du sujet correspond au modèle. Renvoie 1 si des correspondances sont trouvées, sinon elle renvoie 0. Si vous spécifiez un paramètre de tableau facultatif, matches, alors lorsque la fonction est exécutée, un seul élément lui sera ajouté - la première correspondance trouvée.

"; print_r ($ trouvé);?>

int preg_match_all (modèle de chaîne, sujet de chaîne, correspondance de tableau [, ordre int])
La fonction est identique à la précédente, à la seule différence près : elle recherche tout le texte et renvoie TOUTES les correspondances trouvées dans le tableau des correspondances.
mixed preg_replace (modèle mixte, remplacement mixte, sujet mixte [, int limit])
Comme les deux fonctions précédentes, preg_replace recherche un morceau de texte qui correspond à un modèle. La fonction remplace tous les fragments trouvés par le texte spécifié dans les paramètres.Après le nettoyage:\ n $ text \ n \ n "; $ text = preg_replace (" / (\ n \ s (2,)) / "," ", $ text); echo" Après nettoyage :\ n $ text "; // affichera le texte dépouillé de caractères spéciaux // et d'espaces supplémentaires ?>
mixed preg_replace_callback (modèle mixte, rappel mixte, sujet mixte [, int limit])
La fonction est une version étendue de la précédente. La principale différence est que le nom de la fonction qui analysera le texte et formera le texte alternatif est passé à cette fonction dans les paramètres.
array preg_split (modèle de chaîne, sujet de chaîne [, int limit [, int flags]])
Cette fonction est similaire à exploser () et diviser (). Sa particularité est que le séparateur n'est pas une chaîne fixe, mais une expression régulière. La fonction divise les données d'origine en éléments et les place dans le tableau de sortie.
array preg_grep (modèle de chaîne, entrée de tableau)
La fonction est destinée à la recherche régulière dans les tableaux. Pour la recherche, un modèle et un tableau de données d'entrée sont spécifiés, et un tableau est renvoyé, composé uniquement d'éléments qui correspondent au modèle.

La liste de fonctions ci-dessus est loin d'être complète, mais elle est tout à fait suffisante pour bien commencer à travailler avec des expressions régulières. Si vous êtes intéressé par ce sujet, assurez-vous de lire de la littérature supplémentaire (par exemple, le livre de Friedl "Regular Expressions"). De plus, à des fins de formation, je recommande d'installer l'un des programmes spéciaux pour tester les expressions régulières (par exemple, "PCRE" ou "RegEx Builder").

Commençons par ce qu'est une regex. Voici la réponse à ma question, y a-t-il une lettre « e » dans le mot « test » ? "Il y a!" vous dites. Ensuite, je vous pose la deuxième question, comment avez-vous trouvé la lettre « e » dans le mot « test » ? La réponse est évidente, nous prenons le premier caractère, c'est-à-dire "t" et le comparons avec ce que nous recherchons, c'est-à-dire avec "e". S'ils ne sont pas égaux, nous prenons le deuxième caractère, c'est-à-dire "e", le comparons avec ce que nous recherchons, c'est-à-dire "e". Voila ! Une correspondance a été trouvée. Réponse : Le mot « test » contient la lettre « e ».

Répondez-moi maintenant à une autre question, où est l'expression régulière dans cet exemple ? J'espère que vous avez deviné que l'expression régulière ici est ce que nous recherchons dans le mot "test". C'est-à-dire que la lettre "e" dans cet exemple est une expression régulière.

A quoi servent les expressions régulières en php ? Dans ma pratique, les expressions régulières ont été utilisées, par exemple, pour déterminer si une adresse e-mail est bien formée. De telles expressions sont également utilisées pour déterminer l'exactitude du nom d'utilisateur et du mot de passe. En utilisant des expressions régulières, vous pouvez trouver l'adresse dans le lien et l'enregistrer. Beaucoup de choses que vous pouvez faire En analysant cela, vous pouvez identifier la fonction principale des expressions régulières, et les deux secondaires. Fonction principale, il s'agit d'une recherche de correspondances dans une chaîne. Les effets secondaires enregistrent les correspondances trouvées et les remplacent.

Première expression régulière

En théorie, on comprend comment trouver le symbole « e » dans le mot « test », comment cela se met-il en pratique ? Pour utiliser des expressions régulières en php, les fonctions suivantes sont généralement utilisées :

preg_match ("expression régulière (motif)", "variable dans laquelle la recherche est effectuée", "variable dans laquelle le résultat de la recherche est enregistré (paramètre facultatif)"); - Fonction d'appariement
preg_replace ("expression régulière (motif)", "Par quoi remplacer la correspondance trouvée", "variable dans laquelle remplacer"); - Fonction de remplacement

Commençons par utiliser ces fonctions .. Voici un exemple de recherche du caractère "e" dans le mot "test":

$ a = "test" ;
if (preg_match ("/ e /", $ a)) echo "found !!";

Le code décrit la condition, si quelque chose est trouvé dans la variable $ a par le modèle, affiche alors le message "found !!" Comme vous pouvez le voir, notre motif se situe entre deux "/". Dans ce cas, le "/" symbolise le début et la fin de notre modèle... J'espère que ceci est clair.

Tout cela est bien sûr intéressant... mais ce n'est que notre modèle, qui est très simple, vous ne trouvez pas ? Après tout, nous avons rarement besoin de trouver un symbole dans une variable. Dans la plupart des cas, nous devons trouver de nombreux symboles, d'ailleurs inconnus. Comment être? Posons-nous un problème et essayons de le résoudre. Supposons que nous ayons une chaîne composée de nombres et d'une lettre anglaise inconnue

Comment trouvez-vous cette lettre ? Il peut y avoir n'importe quelle lettre de l'alphabet anglais, comment pouvez-vous la définir ? Vous avez vous-même répondu à votre propre question, il y a n'importe quelle lettre, c'est-à-dire qu'elle est comprise entre a et z. Les plages peuvent être utilisées dans les expressions régulières. Si nous ne savons pas quel caractère nous recherchons, mais que nous savons avec certitude que ce caractère est une lettre de l'alphabet anglais, alors l'enregistrement sera le suivant :

$a = "123a321" ;
if (preg_match ("//", $ a)) echo "found !!";

Notez que la plage est entourée de crochets "[" "]". Tout ce qui est mis entre parenthèses est défini comme une caractère, dans ce cas le caractère va de a à z. Si nous devons trouver non pas une lettre, mais un chiffre, alors l'enregistrement sera le suivant :

$a = "abc1cba" ;
if (preg_match ("//", $ a)) echo "found !!";

Je tiens également à noter que les expressions régulières sont sensibles à la casse, donc les caractères "A" et "a" sont complètement différents, pour rechercher ceux et ces caractères, ils écrivent comme ceci :

$a = "123a321" ;
if (preg_match ("//", $ a)) echo "found !!";

Il y a aussi une recherche des lettres russes, elle s'effectue de la même manière qu'avec l'anglais :

$ a = "123ы321" ;
if (preg_match ("/ [a-za-z] /", $ a)) echo "trouvé !!" ;

Métacaractères

Nous avons appris à rechercher un caractère inconnu dans une chaîne. Et si nous avons besoin de trouver plusieurs symboles ? Les soi-disant métacaractères viennent à la rescousse... Supposons que nous ayons une chaîne avec des chiffres, des lettres, comment la décrire dans le modèle ? Tu peux le faire:

chaîne - 123à321
échantillon -

Hmm ... le modèle correspond vraiment à notre chaîne, et lorsqu'il est vérifié pour la conformité, il donnera le vrai tant attendu ! Mais une sorte d'enregistrement encombrant, vous ne trouvez pas ?

Voici comment vous pouvez le raccourcir :

chaîne - 123à321
échantillon - *

Il me semble tellement plus court. Qu'est-ce que le symbole "*" ? C'est le métacaractère même, cela signifie que le caractère que nous avons décrit (à savoir, un caractère qui peut contenir des chiffres de 0 à 9 ou des lettres de l'alphabet anglais, de a à z) peut être répété indéfiniment, ou plus d'une fois. Oui oui! Ce métacaractère correspondra à une variable vide, puisque même l'absence du symbole que nous avons décrit retournera vrai ! Souviens-toi de ça

Quels sont les autres métacaractères ?

Par exemple le métacaractère "+" Il est presque similaire au métacaractère "*" à une petite exception près. "*" retournera vrai même s'il n'y a pas de caractère, et "+" vérifiera la présence d'au moins un caractère. Autrement dit, si la chaîne nécessite la présence le minimum seul caractère puis utilisez "+" au lieu de "*"

Le métacaractère "?" Cela signifie que la chaîne ne doit pas contenir plus d'un caractère obligatoire. Permettez-moi de vous donner quelques exemples pour les deux derniers métacaractères que j'ai décrits.

Supposons que nous devions vérifier l'exactitude du mot de passe de l'utilisateur. Pensons à ce que doit contenir le mot de passe de l'utilisateur ? Eh bien, tout d'abord, il doit s'agir d'au moins un caractère. Deuxièmement, il ne doit contenir que des chiffres et des lettres de l'alphabet anglais, donc l'expression régulière ressemblera à ceci :

$ a = "qwerty12345" ;

Quels caractères avons-nous autorisés ? Lettres anglaises de tout registre et chiffres. Essayez maintenant de laisser une ligne vide au lieu du mot de passe.

$a = "" ;
if (preg_match ("/ + /", $ a)) echo "Le mot de passe est correct";

Vous ne verrez pas le message "Le mot de passe est correct". Pourquoi? Parce que le métacaractère "+" vérifiait la présence d'au moins un caractère dans la chaîne.

Et maintenant, un petit truc, jetons un coup d'œil à notre expression, nous n'avons pas permis, disons, un espace dedans, n'est-ce pas ? mettre un espace à la fin du mot de passe et exécuter

$ a = "qwerty12345" ;
if (preg_match ("/ + /", $ a)) echo "Le mot de passe est correct";

Et pourquoi voyons-nous notre message concernant le mot de passe correct ? Assez simple ... fonction preg_match (); arrête sa vérification sur le premier match. C'est-à-dire que le caractère "q" correspond au modèle que nous avons décrit, et tout le reste n'est plus important pour la fonction. Alors que faire ? Voici comment y remédier :

$ a = "qwerty12345" ;
if (preg_match ("/ ^ + $ /", $ a)) echo "Le mot de passe est correct" ;

En ajoutant "^" au début de l'expression et "$" à la fin, nous disons à la fonction de correspondre au modèle. tous ligne. Si vous exécutez ce code, vous ne verrez pas le message, car la fin du mot de passe contient un caractère invalide - un espace

Remplacez maintenant le métacaractère "+" par le "?" Que penses-tu qu'il va se passer? Le message correct sur l'exactitude du mot de passe sera absent, car le mot de passe contient plus d'un caractère. J'espère avoir correctement expliqué le fonctionnement de ces trois métacaractères couramment utilisés.

Parfois "pas" c'est mieux

À tout le moins, nous avons appris à vérifier l'exactitude du mot de passe, et c'est tant mieux ! Laissez-moi vous parler d'une autre façon de trouver quelque chose dans une chaîne. Disons que nous devons vérifier l'absence de nombres dans une chaîne. Comment faire? Voici la ligne :

(J'y ai délibérément introduit ces symboles "-_ + ()" pour que la vie ne ressemble pas à du miel ...) On pourrait composer l'expression suivante :

Mais vous devez être d'accord, car nous ne savons pas toujours quels caractères sont utilisés dans une chaîne, mais nous savons avec certitude qu'il ne doit pas y avoir de nombres dedans ! Par conséquent, il serait plus logique d'écrire simplement un modèle qui sauterait des lignes dans lesquelles Non chiffres, et non ceux dans lesquels il y a "Oh mon Dieu, combien de symboles incompréhensibles !!!"... Voici un exemple d'expression bien formée pour de telles tâches :

$ a = "a -_ + ()" ;
if (preg_match ("/ ^ [^ 0-9] + $ /", $ a)) echo "Pas de nombres!";

Comment y sommes-nous parvenus ? Nous avons introduit un symbole mais! la majuscule "^" ([^ 0-9]) placée au début signifie que la ligne de ce caractère contient ne devrait pas J'espère que nous avons compris

Bon, concluons un peu ... Je vais donner deux exemples avec des explications, au cours desquels nous apprendrons à enregistrer le résultat de la recherche dans une variable, et nous apprendrons à vérifier l'exactitude de l'adresse postale

Je l'ai vu, je l'ai sauvé !

Mon blog

$a = " Mon blog";
preg_match ("/ / ", $a);

Dans notre expression régulière, nous avons décrit tous les caractères possibles pouvant être inclus dans le lien. Je veux aussi attirer l'attention sur les guillemets et les caractères "/" dans notre expression.. Ils sont précédés d'une barre oblique inverse, à quoi ça sert ? Le fait est que "/" et le guillemet sont des caractères spéciaux en eux-mêmes. Et pour que le modèle les perçoive comme des symboles ordinaires, nous devons les filtrer. Le filtrage est effectué en ajoutant une barre oblique inverse avant les caractères spéciaux. j'espère que c'est clair

$a = " Mon blog";
preg_match ("/ / ", $ a, $ b);

Eh bien, et en conséquence, vous devez ajouter un paramètre supplémentaire sous la forme de la variable $ b, dans laquelle le lien trouvé sera stocké. Vous devez également savoir que le résultat de la recherche est placé dans un tableau. La variable $ b est donc un tableau. L'information que nous recherchons se trouve sous l'index 1. Cela signifie que le résultat de la recherche se trouve dans la variable $ b. nous afficherons le résultat à l'écran :

$a = " Mon blog";
preg_match ("/ / ", $ a, $ b);
echo $b;

La bonne adresse est la clé du succès !

Eh bien, passons à l'étape suivante, la réponse à la question, l'e-mail est-il correct ? Tout d'abord, vous devez savoir quels caractères sont autorisés dans les adresses ? Autant que je sache, les caractères autorisés incluent :

  • Lettres anglaises, chiffres, "_", "-" emmmm comme tout... Partons de là.
  • Ensuite, nous avons "@"
  • Après, les lettres anglaises
  • De plus, le point
  • Et encore, des lettres anglaises...

L'expression régulière sera donc la suivante :

$a = " [email protégé]";
if (preg_match ("/ ^ [email protégé]+. + $ / ", $ a)) echo" L'adresse e-mail est correcte ! ";
else echo "L'adresse e-mail n'est PAS correcte !";

Eh bien... J'espère que de tels enregistrements ne vous effraient pas maintenant, et vous pouvez tout à fait les comprendre.

Sur le suivi, je veux dire quelque chose. L'article s'est avéré lourd et en même temps ne couvrait qu'une partie des possibilités. Si vous lisez cette phrase, vous l'avez probablement lu jusqu'à la fin, merci beaucoup

Quant au cycle d'articles sur le développement d'un blog cms, la première partie du cycle Je l'annonce fermé ! Dans un avenir proche, nous commencerons à implémenter le panneau d'administration, alors ne "changez" pas. Si vous avez des questions, je serai ravi d'y répondre. Bien à vous, j'ai tout !

Lorsqu'ils travaillent avec des textes dans n'importe quel langage de programmation moderne, les développeurs sont constamment confrontés aux tâches de vérification de la conformité des données saisies avec le modèle souhaité, de recherche et de remplacement des fragments de test et d'autres opérations typiques de traitement des informations symboliques. Le développement de 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 d'Internet et des langages de développement WEB a nécessité la création de moyens universels et compacts de traitement des informations textuelles avec le minimum de code requis pour cela. Le langage PHP, populaire parmi les développeurs débutants et professionnels, ne fait pas exception. L'expression régulière en tant que langage de modèle de texte permet de simplifier les tâches de traitement de texte et de réduire le code du programme de dizaines ou de centaines de lignes. De nombreuses tâches ne peuvent pas être résolues du tout 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 PCRE regex, développée à l'origine pour le langage Perl, qui est incluse avec PHP. Les fonctions Preg recherchent des correspondances dans une chaîne de texte donnée selon un certain modèle dans le langage d'expression régulière.

Bases de la syntaxe

Dans le cadre d'un article court, il est impossible de décrire en détail toute la syntaxe des expressions régulières, il existe une littérature spéciale pour cela. Voici juste les principaux éléments pour montrer les larges possibilités pour le développeur et comprendre les exemples de code.

D'un point de vue formel, il est très difficile à définir, et nous allons donc simplifier la description. L'expression régulière est une chaîne de texte. Il se compose d'un modèle délimité et d'un modificateur qui spécifie comment le gérer. 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 «/» , suivi du motif et du symbole "M" sera un modificateur.

Toute la puissance des expressions régulières est encodée à l'aide de métacaractères. Le métacaractère principal du langage est une barre oblique inverse - "\". Il change le type du caractère suivant en celui opposé (c'est-à-dire qu'un caractère ordinaire devient un métacaractère et vice versa). Un autre métacaractère important est la barre oblique « | », qui spécifie des alternatives au modèle. Plus d'exemples de métacaractères :

PHP traite les expressions régulières comme un espace séparé symbole significatif, donc les expressions ABCGDE et ABC WHERE sont différentes.

Sous-modèles

En PHP, les sous-modèles réguliers sont placés entre parenthèses et sont parfois appelés "sous-expressions". Ils remplissent les fonctions suivantes :

    Mettre en évidence les alternatives... Par exemple, le modèle chaleur (certains | oiseau |) correspond aux mots "Chaleur", "oiseau de feu" et "rôti"... Et sans parenthèses, ce sera juste une chaîne vide, "oiseau" et "rôti".

    Un sous-modèle "excitant". Cela signifie que si une sous-chaîne correspond dans le modèle, toutes les correspondances sont renvoyées en conséquence. Pour plus de clarté, donnons un exemple. Étant donné la regex suivante : le gagnant reçoit ((or | plaqué or) (médaille | coupe)) - et une chaîne pour trouver des correspondances : "Le vainqueur reçoit une médaille d'or"... En plus de la phrase d'origine, 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 très 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 si nous ne connaissons pas leur nombre exact ? Dans ce cas, vous devez utiliser des métacaractères spéciaux.

Pour décrire les répétitions, des quadrifiers sont utilisés - des métacaractères pour spécifier le nombre. Les quadrificateurs sont de deux types :

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

Le quantificateur commun touche le minimum et quantité maximale autorisait les répétitions d'un élément sous la forme de deux nombres entre accolades, par exemple : 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 sont des caractères pour les répétitions les plus courantes afin d'éviter une surcharge 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 tous ceux qui apprennent les expressions régulières, les exemples sont le meilleur tutoriel. Nous en donnerons quelques-uns qui montrent leurs larges capacités avec un minimum d'effort. Tous les codes de programme sont entièrement compatibles avec PHP 4.x et les versions supérieures. Pour une compréhension complète de la syntaxe et de l'utilisation de toutes les fonctionnalités du langage, nous vous recommandons le livre de J. Friedl "Regular Expressions", qui examine pleinement la syntaxe et fournit des exemples d'expressions régulières non seulement en PHP, mais aussi pour le langages Python, Perl, MySQL, Java, Ruby et C#.

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

Tâche. Il y a une page Web qui demande au visiteur une adresse e-mail. L'expression régulière doit vérifier la validité de l'adresse reçue avant d'envoyer des messages. La vérification ne garantit pas que le boites aux lettres existe vraiment et accepte les lettres. Mais il peut éliminer les adresses délibérément incorrectes.

Solution. Comme dans n'importe quel langage de programmation, en PHP, des expressions régulières de validation d'adresse e-mail peuvent être implémentées différentes façons et les exemples de cet article ne sont pas définitifs et constituent la seule option. 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, l'expression de validation d'e-mail doit vérifier les conditions suivantes :

  1. La présence du symbole @ dans la chaîne d'origine et l'absence d'espaces.
  2. La partie domaine de l'adresse, suivie du symbole @, ne contient que des caractères valides pour les noms de domaine. Il en va de même pour le nom d'utilisateur.
  3. Lors de la validation d'un nom d'utilisateur, il est nécessaire de déterminer la présence de caractères spéciaux tels qu'une apostrophe ou. Ces caractères sont potentiellement dangereux et peuvent être contenus dans des attaques telles que l'injection SQL. Évitez de telles adresses.
  4. Les noms d'utilisateur n'acceptent qu'un seul point, qui ne peut être ni le premier ni le dernier caractère d'une ligne.
  5. Le nom de domaine doit contenir au moins deux et pas plus de six caractères.

Un exemple qui prend en compte toutes ces conditions peut être vu dans la figure ci-dessous.

Validation des URL

Tâche. Vérifiez si la chaîne de texte donnée est valide Notez à nouveau que les expressions régulières de validation d'URL peuvent être implémentées de différentes manières.

Solution. Notre version finale ressemble à ceci :

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

Analysons maintenant ses composants plus en détail à l'aide de l'image.

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é saisi des systèmes de paiement les plus courants. Option envisagée pour les cartes uniquement

Solution. Lors de la création d'une expression, vous devez tenir compte de la présence éventuelle d'espaces dans le nombre saisi. Les numéros sur la carte sont divisés en groupes pour faciliter la lecture et la dictée. Par conséquent, il est tout à fait naturel pour une personne d'essayer d'entrer un numéro de cette façon (c'est-à-dire en utilisant des espaces).

Écrire une expression générique qui prend en compte les espaces et les tirets possibles est plus difficile que de simplement supprimer tous les caractères à l'exception des nombres. 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 nombres.

Vous pouvez maintenant passer directement à la vérification du numéro. Toutes les entreprises produisant cartes de crédit utiliser un format de nombre unique. L'exemple utilise ceci et le client n'a pas besoin d'entrer le nom de l'entreprise - il est identifié par un numéro. Cartes Visa commencent toujours par 4 et comportent 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 la commande, vous pouvez également vérifier le dernier chiffre du numéro, qui est calculé à l'aide de l'algorithme Luna.

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. Nombre de chiffres en fixe et mobile les numéros de téléphone varie considérablement d'un pays à l'autre, il n'est donc pas possible de vérifier l'exactitude d'un numéro de téléphone à l'aide d'expressions régulières. Mais numéros internationaux ont un format strict et sont parfaits pour la vérification des modèles. De plus, de plus en plus de pays opérateurs téléphoniques essayer de se conformer à une norme unique. La structure du problème est la suivante :

+ CCC.NNNNNNNNNNxEEEE, où:

C est un code de pays à 1 à 3 chiffres.

N - nombre jusqu'à 14 chiffres.

E est une extension facultative.

Le plus est requis et le x n'est présent que lorsqu'une extension est requise.

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

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

Numéros dans la gamme

Tâche. Vous devez vous assurer qu'un entier d'une plage spécifiée correspond. De plus, il est nécessaire que les expressions régulières ne trouvent que des nombres à partir d'une plage de valeurs.

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

Trouver une adresse IP

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

Solution. Comme pour toute tâche en PHP, une expression régulière a de nombreuses variantes. Par exemple, quelque chose comme ceci :

Vérification en ligne des expressions

La vérification de l'exactitude des expressions régulières peut être difficile pour les programmeurs novices en raison de la complexité de la syntaxe, qui diffère des langages de programmation « normaux ». Pour résoudre ce problème, il existe de nombreux testeurs d'expression en ligne qui vous permettent de vérifier facilement l'exactitude du modèle créé sur du texte réel. Le programmeur entre une expression et des données pour vérification et voit instantanément le résultat du traitement. Habituellement, il existe également une section de référence, qui décrit en détail les expressions régulières, les exemples et les différences d'implémentation pour les langages de programmation les plus courants.

Mais faire entièrement confiance aux résultats des services en ligne n'est pas recommandé pour tous les développeurs utilisant PHP. Une regex, écrite et testée personnellement, est à jour et garantie sans erreur.

Les expressions régulières sont des modèles spéciaux pour rechercher une sous-chaîne dans le texte. Avec leur aide, vous pouvez résoudre les tâches suivantes en une seule ligne : "vérifier si la chaîne contient des nombres", "trouver tout dans le texte adresses mail"," Remplacez plusieurs points d'interrogation consécutifs par un ".

Commençons par une sagesse de programmation populaire :

Certaines personnes, face à un problème, pensent : « Ouais, je suis intelligent, je vais le résoudre avec des expressions régulières. » Maintenant, ils ont deux problèmes.

Exemples de modèles

Commençons par un couple 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 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 de fonction particulière dans les modèles réguliers, par exemple, ~, # ou @. Des délimiteurs alternatifs sont utilisés si le / 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 offrent des options supplémentaires lors de la recherche de texte. Voici quelques exemples de drapeaux :

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

Le modèle lui-même se compose de symboles réguliers et de constructions spéciales. Eh bien, par exemple, la lettre "k" dans les lignes régulières signifie elle-même, mais les symboles signifient "à cet endroit, il peut y avoir n'importe quel nombre de 0 à 5". 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 l'expression régulière sont normaux :

Ci-dessous, nous analyserons la signification de chacun de ces symboles (et expliquerons également pourquoi la lettre "ё" est rendue 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. Php a une fonction spéciale preg_match ($ regexp, $ text, $ match) qui prend en entrée un modèle régulier, un texte et un tableau vide. 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 un. Et dans le tableau passé dans l'élément avec l'index 0, la première correspondance trouvée avec l'expression régulière est mise. Écrivons un programme simple qui applique des expressions régulières à différentes chaînes :

Après avoir pris connaissance de l'exemple, nous étudierons plus en détail les expressions régulières.

Parenthèses dans les expressions régulières

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

  • Les accolades a (1,5) spécifient 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 "l'un 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 tels que | ou * - ils représentent un caractère régulier. Si le symbole ^ se trouve au début des crochets, alors le sens est inversé : « n'importe quel caractère, sauf ceux spécifiés » - par exemple [^ a-c] signifie « 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 se réfère uniquement à la lettre c et cette expression recherche des mots comme abc, abcc, abccc. Et si vous mettez les parenthèses a (bc) + alors le quantificateur plus fait référence à la séquence bc et l'expression recherche les mots abc, abcbc, abcbcbc

Remarque : entre crochets, vous pouvez spécifier des plages de caractères, mais rappelez-vous que la lettre russe va séparément de l'alphabet et pour écrire "n'importe quelle lettre russe", vous devez écrire [a-yayo].

Bexsles

Si vous avez consulté d'autres didacticiels sur les regex, 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 d'expression régulière vous oblige à écrire la barre oblique inverse une fois. Cependant, dans les chaînes entre guillemets simples et doubles en PHP, la barre oblique inverse a également une signification particulière : le manuel sur les chaînes. Eh bien, par exemple, si vous écrivez $ x = "\ $" ; alors PHP interprétera cela comme une combinaison spéciale et insèrera uniquement le caractère $ dans la chaîne (et le moteur de regex ne connaîtra pas la barre oblique inverse). 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ù une séquence de caractères a une signification particulière en PHP), nous devons doubler la barre oblique inverse :

  • Pour écrire \$ dans la regex, on écrit dans le code "\\ $"
  • Pour écrire \\ dans la regex, nous doublons chaque barre oblique inverse et écrivons "\\\\"
  • Pour écrire une barre oblique inverse et un nombre (\ 1) dans la grille régulière, la barre oblique inverse doit être doublée : "\\ 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 chaîne - dans le premier cas, 2 barres obliques inverses sont une séquence pour insérer une barre oblique inverse, dans le second cas, il n'y a pas de séquence spéciale et les caractères seront insérés tels quels. Vous pouvez vérifier quels caractères sont insérés dans la chaîne et ce que le moteur de regex voit avec echo : echo "\ $"; ... Oui, c'est difficile, mais que pouvez-vous faire ?

Constructions spéciales chez les habitués

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

De plus, il existe 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é ce n'est pas le cas. Eh bien, par exemple, nous voulons trouver le mot "chat" dans le texte. Si nous écrivons le regex / cat / ui, alors il trouvera la séquence de ces lettres n'importe où - par exemple, à l'intérieur du mot "bovin". Ce n'est clairement pas ce que nous voulions. Si nous ajoutons le mot condition aux limites à l'expression régulière : / \ bcat \ b / ui, alors seul le mot séparé "cat" sera recherché.

Manuel

  • Syntaxe des expressions régulières PHP, description détaillée
gastroguru 2017