Regex modificateurs en PHP PHP expressions régulières - Partie V Présentation Matching est sensible à la casse. Vous ne pouvez pas savoir si ce que vous recherchez est en minuscules ou en majuscules ou a mélangé cas. Il est possible pour vous de faire un match insensible à la casse. Vous avez besoin de ce qu'on appelle un modificateur pour cela. Il ya un bon nombre de modificateurs et chacun a son propre but. Nous allons apprendre certains d'entre eux dans cette partie de la série. Le modificateur i Par défaut, l'appariement est sensible à la casse.
Pour le rendre insensible à la casse, vous devez utiliser ce qu'on appelle le modificateur de i. Donc, si nous avons l'expression rationnelle, /envoyer /puis nous avons aussi $ subject = "Cliquez sur le bouton Envoyer." le code suivant ne produira pas un match: $ subject = "Cliquez sur le bouton Envoyer."; $ subject = "Cliquez sur le bouton Envoyer."; if (preg_match ("/envoyer /", $ subject)) echo "correspondance". "Else echo" ne correspond pas ".
"?> Le regex n'a pas correspondre à la chaîne de sujet parce que l'expression rationnelle a "envoyer" où S est en minuscules, mais la chaîne de l'objet a "Envoyer" où S est en majuscules. Si vous voulez que cette correspondance soit insensible à la casse, alors votre expression régulière devra être /envoyer /i Notez le i juste après la seconde barre oblique. Il est le modificateur de i. Le code suivant va produire un match. $ subject = "Cliquez sur le bouton Envoyer."; if (preg_match ("/envoi /i", $ subject)) echo "correspondance". "Else echo" ne correspond pas ".
"?> Matching a eu lieu parce que nous avons fait le cas de regex insensible, avec le modificateur i. Matching mondiale, il est possible pour vous d'avoir plus d'une chaîne de sous dans la chaîne de l'objet qui correspond à l'expression rationnelle. Par défaut, seule la première sous-chaîne dans le sujet est adaptée. Pour correspondre à tous les sous chaînes de caractères dans l'objet, vous devez utiliser la fonction preg_match_all (). Ceci est la syntaxe: int preg_match_all ($ string pattern, string $ sujet, array & $ matches [, int $ flags]) Le premier argument est l'expression rationnelle.
Le second est le sujet. Le troisième est le tableau, qui détient tous les matchs. Il est un tableau à deux dimensions, ici (pour la fonction preg_match (), il est un réseau à une dimension). Le quatrième argument est facultatif. Nous allons parler seulement environ un drapeau pour cet argument. Considérez la chaîne sujet suivant: $ subject = "Un chat est un animal Un rat est un animal Une chauve-souris est une créature..."; Dans le sujet ci-dessus, vous avez sous les cordes: chat, le rat et chauve-souris. Vous avez chat d'abord, puis le rat et puis chauve-souris.
Chacun de ces sous chaînes correspondent à l'expression régulière suivante: /[CBR] au /Ce modèle sera seulement correspondre à la première chaîne de sous, "chat". Si vous voulez "chat" et "rat" et "chauve-souris" d'être jumelés, vous devez utiliser la fonction preg_match_all () comme le code suivant illustre: $ subject = "Un chat est un animal Un rat est un animal A.. chauve-souris est une créature ". (si preg_match_all ("/[CBR] AT /", $ subject, $ matches, PREG_PATTERN_ORDER)) echo "correspondance". "Else echo" ne correspond pas "." Echo "echo $ matches [0] [0]." Echo $ matches [0] [1].
"Écho matchs de $ [0] [2]."?> Le dernier argument de la fonction preg_match_all () est un drapeau. Nous y reviendrons prochainement. Les premier, deuxième et troisième éléments du premier tableau du tableau à deux dimensions sont "chat", "rat" et "chauve-souris". Ainsi, la sortie du code ci-dessus est: Matched batte de rat chat Maintenant, la matrice bidimensionnelle fournit deux tableaux dans le code. Le premier tableau reçoit les sous chaînes qui correspondent, dans l'ordre dans lequel les sous chaînes ont été vus dans le sujet. Ceci est en correspondance globale.
Le drapeau de PREG_PATTERN_ORDER Avec ce drapeau, les résultats sont tels que, $ matches [0] est un tableau de masque complet, $ matches [1] est un tableau de chaînes appariées par la première parenthèse, et ainsi de suite. Les modificateurs s et m Le modificateur s se réfère à une seule ligne et le modificateur m se réfère à plusieurs lignes dans une chaîne. Habituellement, sans ces modificateurs, nous obtenons ce que nous voulons. Parfois, cependant, nous voulons garder une trace de \\ n caractères.
Un fichier dans le disque dur pourrait être composé de nombreuses lignes de texte chacun se terminant par le caractère \\ n. Par défaut, l'ancre et $ ^ caractères au début et à la fin de la chaîne sujet. Nous pouvons faire les ancrer le début et la fin des lignes. Les s et les m modificateurs agissent sur l'interprétation de la ^, $ et le metahcaracter de points. Voici la description complète des modificateurs s et m * pas de modificateurs: Ici, nous regardons le cas où il n'y a pas de modificateur juste après la seconde barre oblique. Sous cette condition '.
' correspond à tout caractère sauf "\\ n". ^ Correspond uniquement au début de la chaîne et $ correspond seulement à la fin sous réserve de chaîne ou avant \\ n à la fin. Ceci est le comportement par défaut du métacaractère point. * De modificateur: Cela rend la chaîne sujet se comporte comme une longue ligne indépendante de tout caractère de nouvelle ligne qui peuvent être là. Ainsi '.' correspond à tout caractère, même "\\ n". ^ Correspond uniquement au début de la chaîne et $ correspond uniquement à la fin de la chaîne de sujet ou avant \\ n.
* Modificateur m: Cela rend la chaîne objet se comporte comme un ensemble de plusieurs lignes. Dans la chaîne de l'objet, des lignes consécutives sont séparées par le caractère \\ n. Ainsi '.' correspond à tout caractère sauf "\\ n". De cette façon ^ et $ sont en mesure de correspondre au début ou à la fin d'une ligne dans la chaîne de l'objet. Ici, ^ correspond au début de la chaîne ou juste après le caractère \\ n, tandis que $ matches juste avant le caractère \\ n. Nous allons utiliser des exemples pour illustrer les trois conditions ci-dessus.
Nous commençons par examiner la première condition. Aucun modificateur lire le premier point ci-dessus à nouveau. Considérez la chaîne sujet multiligne suivante: $ subject = "La première phrase \\ n La deuxième phrase La troisième phrase \\ n \\ n..."; La chaîne de l'objet dispose de trois lignes. L'expression suivante produit un match. preg_match ("/seconde /", $ subject) Le sous-chaîne "deuxième", dans la deuxième ligne (phrase) est adaptée. Considérons le schéma suivant: /^.*$/Ce modèle (regex) est prévu dans des circonstances normales, pour correspondre à la chaîne entière.
Voyons si il le fait avec le sujet chaîne multi-ligne ci-dessus. Considérons le code suivant: $ subject = "La première phrase \\ n La deuxième phrase La troisième phrase \\ n \\ n..."; if (preg_match ("/^.*$/", $ subject)) echo "correspondance". "Else echo" ne correspond pas "."?> Si vous exécutez ce code, pas de correspondance aura lieu. Ceci est dû à la présence du caractère \\ n dans la chaîne sujet. Par défaut, la classe de points ne correspond pas au caractère \\ n. Je espère que vous apprécierez maintenant ce que le premier point ci-dessus parle.
modificateur s Lire le deuxième point ci-dessus à nouveau. Nous allons faire la même chose que nous avons fait avant. Considérez la chaîne sujet suivant: $ subject = "La première phrase \\ n La deuxième phrase La troisième phrase \\ n \\ n..."; La chaîne de l'objet dispose de trois lignes. L'expression suivante produit un match. preg_match ("/seconde /s", $ subject) Notez que le modificateur s a été utilisé. La sous-chaîne "deuxième", dans la deuxième ligne (phrase) est adaptée. Considérons le schéma suivant: /^.*$/s Ce modèle (regex) est censé correspondre à la chaîne entière.
Voyons si il le fait avec le sujet chaîne multi-ligne ci-dessus. Considérons le code suivant: $ subject = "La première phrase \\ n La deuxième phrase La troisième phrase \\ n \\ n..."; if (preg_match ("/^.*$/s", $ subject)) echo "correspondance". "Else echo" ne correspond pas "."?> Un match est produite. En effet, avec le modificateur s, le point (classe) correspond au caractère de nouvelle ligne. Je espère que vous apprécierez maintenant ce que le deuxième point ci-dessus parle. Le modificateur m Lire le troisième point ci-dessus à nouveau. Ici, nous regardons l'effet du modificateur m.
Considérez la chaîne sujet suivant: $ subject = "La première phrase \\ n La deuxième phrase La troisième phrase \\ n \\ n..."; La chaîne de l'objet dispose de trois lignes. L'expression suivante produit un match. preg_match ("/seconde /m", $ subject) Notez que le modificateur m a été utilisé. La sous-chaîne "deuxième", dans la deuxième ligne est adapté. Considérons le schéma suivant: /(^.*$)/m Avec le modificateur m, ce modèle (regex) doit correspondre à une seule ligne. Voyons si il le fait avec le sujet chaîne multi-ligne ci-dessus.
Considérons le code suivant: $ subject = "La première phrase \\ n La deuxième phrase La troisième phrase \\ n \\ n..."; if (preg_match ("/^.*$/m", $ subject)) echo "correspondance". "Else echo" ne correspond pas "."?> Seule la première phrase est adaptée. Donc, il correspondait à la première ligne. Vous pouvez faire correspondre et de capturer toutes les trois phrases dans les trois lignes. Vous mettez le modèle entre parenthèses (groupe sous). Vous utilisez la fonction regex PHP, preg_match_all () au lieu de preg_match (). Vous pouvez également utiliser l'PREG_PATTERN_ORDER du pavillon.
Le tableau contenant les sous chaînes capturées est un tableau à deux dimensions. Il dispose de deux tableaux. Le code suivant illustre cela: $ subject = "La première phrase \\ n La deuxième phrase \\ n La troisième phrase \\ n..."; si (preg_match_all ("/(^.*$)/m", $ subject, $ correspond, PREG_PATTERN_ORDER)) echo "matched". "Else echo" ne correspond pas "." Echo "echo $ matches [0] [0]." Echo $ matches [0] [1]. "Echo $ matches [0] [2]." Echo "echo $ matches [1] [0]." Echo $ matches [1] [1]. "Écho matchs de $ [1] [2].
">