Maison  >  Article  >  développement back-end  >  Explication détaillée des expressions régulières

Explication détaillée des expressions régulières

步履不停
步履不停original
2019-07-01 16:25:525497parcourir

Explication détaillée des expressions régulières

Le langage d'expression régulière se compose de deux types de caractères de base : les caractères de texte littéraux (normaux) et les métacaractères.

Recommandations associées :
1. Tutoriel sur la syntaxe des expressions régulières (y compris les outils de test en ligne)
2 Tutoriel vidéo de démarrage rapide des expressions régulières PHP Le <.>
le métacaractère a des capacités de traitement utilisant des expressions régulières. Les métacaractères peuvent être n'importe quel caractère unique placé dans

(par exemple, [ ] signifie correspondre à un seul caractère minuscule [a]), ou il peut s'agir d'une séquence de caractères (comme a signifie correspondre à n'importe quel caractère entre [a-d] caractères, et a 、b、 c、 d représente les lettres, chiffres et traits de soulignement anglais), les métacaractères courants sont les suivants : w

Métacaractères communs

PersonnagesLe début de la chaîne correspondante
Description Instructions spéciales
. Faire correspondre n'importe quel caractère sauf la nouvelle ligne () ~
[abcde] Faire correspondre n'importe quel caractère dans a b c d e Tous les caractères sont ou
[a-h] Faire correspondre n'importe quel caractère entre
字符 描述 特别说明
. 匹配除换行符(n)以外的任意字符 ~
[abcde] 匹配 a b c d e 之中的任意一个字符 所有字符是 的关系
[a-h] 匹配 ah之间的任意一个字符 ~
[^fgh] 不与 fgh之中的任意一个字符匹配 在 中括号[ ] 的第一个字符前加上 ^ 表示 取反
不匹配中括号里面出现的任意字符
w 匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于[a-zA-Z0-9_] ~
W w 相反,相当于 [^a-zA-Z0-9_] ~
s 匹配任意的空白符,相当于 [fnrtv] ~
S s相反,相当于 [^s] ~
d 匹配任何 0 到 9 之间的单个数字,相当于 [0-9] ~
D d 相反,相当于[^0-9] ~
[u4e00-u9fa5] 匹配任意单个汉字(中文)(这里用的是 Unicode 编码表示的汉字) ~
b 匹配单词的开始或结束 ~
^ 匹配字符串的开始 放在中括号的第一个字符前 则变为 取反的意思
$ 匹配字符串的结束 ~
et h
~
[^fgh] ne correspond à aucun caractère dans fgh Ajouter ^ avant le premier caractère de la parenthèse

à nier

ne correspond à aucun caractère apparaissant à l'intérieur de la parenthèse

td> Correspond aux caractères anglais majuscules et minuscules, à tout nombre compris entre 0 et 9, ainsi qu'aux traits de soulignement, équivalents à [a- zA-Z0-9_] ~ td>
W &
Au contraire, équivalent à [^a-zA-Z0-9_]
~
s code> correspond à n'importe quel caractère d'espacement, équivalent à [fnrtv] ~
S est l'opposé de s, équivalent à [^s] ~
d Correspond à n'importe quel nombre entre 0 et 9, équivalent à [0-9] ~
D est l'opposé de d, équivalent à [^0-9] ~
[u4e00-u9fa5] Correspond à n'importe quel caractère chinois (chinois) (les caractères chinois représentés par l'encodage Unicode sont utilisés ici) ~
b Faire correspondre le début ou la fin d'un mot ~
^ est placé avant le premier caractère des crochets et devient inverse
$ Faire correspondre la fin de la chaîne ~
  • Qualificateur d'expression régulière Fonction : Limiter le nombre d'occurrences de l'
  • unité
  • devant ce symbole unité :
  • nSi ce qui apparaît avant est un caractère, alors ce caractère est une unité

    字符 描述 特别说明
    * 匹配 0 到 多 个元字符,相当于 {0,} ~
    ? 匹配 0 到 1 个元字符, 相当于 {0,1} ~
    + 匹配至少 1 个元字符,相当于 {1,} ~
    {n} 匹配 n 个元字符 ~
    {n,} 匹配至少 n 个元字符 ~
    {n,m} 匹配 n 到 m 个元字符 ~
    b 匹配单词边界 ~
    ^ 字符串必须以指定的字符开始 ~
    $ 字符串必须以指定的字符结束 ~
    Si nous utilisons des parenthèses pour mettre un long Si la chaîne est entourée, alors la parenthèse entière est considérée comme une unité . Les métacaractères ci-dessus sont tous comparés à un seul caractère. Si vous souhaitez faire correspondre plusieurs caractères en même temps, vous devez également utiliser des qualificatifs courants ( et m dans le tableau ci-dessous représentent tous deux des entiers. )

    Explication - Un cas particulier

    1. peut entourer plusieurs métacaractères ou caractères de texte littéraux avec des crochets pour former un 分组, par exemple, ^(13)[4-9]d{8}$ représente n'importe quel caractère commençant par 13 Numéro de téléphone portable commençant par.
      1. abcabcabc+ signifie que la dernière lettre c apparaît 1 ou plusieurs fois ;
      2. (abcabcabc)+ signifie que la chaîne entière abcabcabc apparaît 1 ou plusieurs fois.
    2. Vous pouvez utiliser | pour représenter la relation entre , par exemple, z|j|q signifie correspondre à n'importe quelle lettre de z 、j、q. En fait, cela équivaut à [zjq].
      1. ab|cd|ef signifie : soit ab, cd ou ef.
      2. a(b|cd|e)f signifie : commençant par a, soit b, cd ou e, et enfin se terminant par f.
      3. Résumé : La seule limite de | () est les parenthèses (( ))
    3. [0-9A-Z.?] Ce régulier Comment tu comprends ?
      1. Lorsque . et ? apparaissent entre crochets , . et ? deviendront des caractères ordinaires, qui sont un point et un point d'interrogation. Vous pouvez comprendre que la priorité de [ ] est supérieure à la priorité de . 和 ?.
      2. Cette expression régulière correspondra exactement à la chaîne ?aaa.bbb, rappelez-vous ici que . 和 ? est traitée comme un caractère normal.

    Avancé 1 - Structure multi-sélection

    La structure multi-sélection est en fait l'utilisation de métacaractères | (ou).
    Plage de définition : début, fin, parenthèses

    Régulier Signification
    Windows98|Windows2000|WindowsXP correspond à Windows98 ou Windows2000 ou WindowsXP
    ^Windows98|Windows2000|WindowsXP$ Utiliser Windows98 code > commence par <code>Windows2000 ou se termine par WindowsXP
    正则 含义
    Windows98|Windows2000|WindowsXP 匹配Windows98或者Windows2000或者WindowsXP
    ^Windows98|Windows2000|WindowsXP$ Windows98开头或者包含Windows2000或者以WindowsXP结尾
    注意^$都包含在|的范围内,因为|的界限只有:开头、结尾、小括号
    Windows(98|2000|XP) Windows然后98 或者2000或者XP
    Notez que ^ et $ sont tous deux inclus dans la portée de , car sont uniquement : début, fin, parenthèses
    Windows(98|2000|XP) Windows puis 98 ou 2000 ou XP

    Résumé : La structure multi-sélection peut inclure de nombreux caractères, mais elle ne peut pas dépasser les limites de 括号.

    Avancé 2 - Regroupement et références arrière

    Regroupement

    • Nous savons déjà comment répéter un seul caractère. Que dois-je faire si je veux répéter ? une ficelle ? Vous
    • pouvez spécifier des sous-expressions (également appelées regroupements)
    • à l'aide de parenthèses.
    • Expression de correspondance d'adresse IP simple
    • (d{1,3}.){3}d{1,3} mais elle correspondra également à l'adresse IP impossible
    • 256.300.888.999
    • . Pouvez-vous écrire une expression régulière plus précise ? Correspondance Le texte de cette sous-expression peut être capturé par pour un traitement ultérieur dans l'expression ou dans d'autres programmes.
    • Par défaut, chaque groupe aura automatiquement un numéro de groupe. Les règles sont : ((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)Avec le
    • du groupe comme repère, de gauche à droite, le numéro de groupe du premier groupe est 1, Le deuxième vaut 2, et ainsi de suite
    .

    • Exemple :
    • peut être utilisé pour faire correspondre des mots répétés
    • correspondances telles que : 左括号

    Explication simple : Dans les expressions régulières, les parenthèses sont utilisées pour diviser (regrouper) le devant, puis le contenu correspondant aux parenthèses

    est cité
      Plus tard, ils sont représentés par
    • , b(w+)bs+1b, etc. (La première parenthèse est
    • ...). S'il y a des parenthèses imbriquées entre parenthèses
    • rappelez-vous : à ce moment-là, utilisez where where go, tom tom happy comme marque et comptez simplement les parenthèses de gauche à droite.
    Avancé 3 - Regarder autour (affirmation de largeur nulle)

    Regarder autour ne correspond à aucun caractère, seulement à la
    position spécifique dans le texte. Semblable à , 1, 2. 1Regarder autour de soi ne prend pas de caractères. (w+(.?))(

    Regarder autour est divisé en deux types :

    commande

    et
      commande inversée
    •  : commandeb^$ derrière la position peut correspondre
    • . Par exemple :
    • Il y a des chiffres à droite de la position actuelle. derrière la position ne peut pas correspondre
      • . Par exemple :
          Le côté droit de la position actuelle n'est pas un nombre.
        • (?=exp)Dans l'ordre inverse exp(?=d)
        • devant la position peut correspondre (?!exp) . Par exemple : Le côté gauche de la position actuelle est le numéro exp(?!d)
        • Le
        devant la position ne peut pas correspondre à
      • . Par exemple :
          Le côté gauche de la position actuelle n'est pas un nombre.
        • (?<=exp)exp(?<=d)
        • Avancé 4 - Cupidité et paresse
        • (?<!exp)Lorsque l'expression régulière contient un quantificateur qui accepte les répétitions le comportement habituel de exp est de faire correspondre autant de caractères (?!d) que possible.
        Expression régulière :
      • , qui correspondra à la chaîne la plus longue commençant par
      et se terminant par
    • . Si vous l'utilisez pour rechercher
    , il correspondra à la chaîne entière

    , appelée -------

    correspondance gourmande
    • -+Nous avons besoin de *correspondance paresseuse{3,12}, c'est-à-dire de faire correspondre le moins de caractères possible. Les quantificateurs donnés ci-dessus peuvent être convertis en modèles de correspondance paresseuse, ajoutez simplement un point d'interrogation après
    • . De cette façon,
    • signifie faire correspondre n'importe quel nombre de répétitions, mais en utilisant le moins de répétitions de a.*b qui font que l'ensemble du a match est réussi. baababaabab correspond à la chaîne la plus courte commençant par et se terminant par . Si vous l'appliquez à
    • , il correspondra à
    • et
    • .
    • Résumé : ?La différence entre le mode gourmand et le mode paresseux est : .*?Le mode paresseux a un point d'interrogation supplémentaire après le quantificateur
    • .
    • a.*?baAvancé 5 - Priorité de la correspondance de modèles baababLorsque vous utilisez des expressions régulières, vous devez faire attention à l'ordre de correspondance. Habituellement, la même priorité aab est calculée de gauche à droite ab, et les opérations avec des priorités différentes sont
    • d'abord élevées, puis faibles
    . La priorité de l'ordre de correspondance des différents opérateurs

    va de haut en bas

    comme indiqué dans le tableau suivant.
    顺序 元字符 描述
    1 转义字符
    2 ()(?:)(?=)[] 模式单元和原子表
    3 *+{n}{n,}{n,m} 重复匹配
    4 ^$bBAZ 边界限制
    5 | 模式选择

    Exemple

    1. Échappement de caractère

    1Q : Comment dois-je écrire l'expression régulière pour faire correspondre le 33333333333 dans la chaîne $ ?
    2Q : Si la fonction preg_match en PHP utilise respectivement les expressions de guillemets simples et de guillemets doubles pour correspondre au $ ci-dessus, comment l'écrire ?

    Réponse :

    • La règle requise pour l'expression est $
    • Utiliser des guillemets simples pour représenter la chaîne ci-dessus '/\$/' . (Pour faciliter la visualisation, nous l'avons divisé en '/\  \  \  $/')
    • Utilisez des guillemets doubles pour représenter la chaîne ci-dessus "/\$/". (Pour faciliter la visualisation, nous l'avons divisé en "/\  \  \  $/")
    • Que demandez-vous ?

    Une autre réponse :

    1. Les guillemets simples en PHP n'échappent à aucun caractère, mais seul est échappé, nous avons donc besoin de 6 pour générer des expressions.
    2. En plus d'échapper à , les guillemets doubles ont également besoin d'un supplémentaire pour s'échapper $, il en faut donc 7 .

    Recommandations de didacticiels associées : Tutoriel vidéo PHP

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

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn