Tutoriel d'introduction de 30 minutes aux expressions régulières
Objectif de ce article
Comment utiliser ce tutoriel
Que sont exactement les expressions régulières ?
Démarrer
Test des expressions régulières
Métacaractères
Évasion de personnage
Duplicate
Classe de personnage
Condition de branche
Antonymes
Regroupement
Références arrières
Zéro- assertion de largeur
Assertion de largeur nulle négative
Commentaires
Options de gestion gourmandes avec paresseux
Groupe équilibré/correspondance récursive
Y a-t-il autre chose qui manque Mentionner
Contacter l'auteur
Enfin, un peu de publicité...
Ressources en ligne Et les références de cet article
Mise à jour de l'enregistrement
Version : v2.31 (2009-4-11) Auteur : deerchao Veuillez indiquer la source de la réimpression
Passer la table des matières
En 30 minutes, vous comprendrez ce que sont les expressions régulières et aurez une compréhension de base de eux, vous permettant de l'utiliser dans vos propres programmes ou pages Web.
Plus important encore - donnez-moi 30 minutes, si vous n'avez aucune expérience avec les expressions régulières, n'essayez pas de le faire 30Commencez en quelques secondes—sauf si vous êtes un superman :)
Ne vous laissez pas intimider par les expressions compliquées ci-dessous, suivez-moi simplement étape par étape et vous constaterez que les expressions régulières ne Je ne t'ai pas vraiment. C'est aussi difficile qu'on l'imagine. Bien sûr, si après avoir lu ce tutoriel, vous constatez que vous comprenez beaucoup de choses, mais que vous ne vous souvenez de presque rien, c'est normal - je pense que les personnes qui n'ont jamais été exposées aux expressions régulières constateront qu'elles comprennent beaucoup après avoir lu ceci. tutoriel. , la possibilité de mémoriser plus de 80% de la grammaire mentionnée est nulle. Ceci est juste pour vous permettre de comprendre les principes de base. Vous devrez vous entraîner davantage et l'utiliser davantage à l'avenir pour maîtriser efficacement les expressions régulières.
En plus d'être un tutoriel d'introduction, cet article tente également d'être un manuel de référence sur la syntaxe des expressions régulières qui peut être utilisé dans le travail quotidien. En ce qui concerne la propre expérience de l'auteur, cet objectif a été bien atteint - vous voyez, je ne peux pas tout écrire moi-même, n'est-ce pas ?
Format clair Conventions de format de texte : Termes techniques Format de métacaractères/grammaire Expression régulière Partie de l'expression régulière (pour analyse) Le caractère source qui correspond à la chaîne Explication d'une expression régulière ou d'une partie de celle-ci
Masquer les notes latérales Il y a quelques commentaires sur le côté droit de cet article, principalement Il est utilisé pour fournir des informations pertinentes ou expliquer certains concepts de base aux lecteurs sans formation de programmeur, et peut généralement être ignoré.
Le caractère est l'unité la plus élémentaire lorsque le logiciel informatique traite du texte, qui peut être des lettres, des chiffres, des signes de ponctuation, des espaces, des nouvelles lignes, des caractères chinois, etc. String est une séquence de 0 caractères ou plus. Texte est du texte, une chaîne. Dire qu'une certaine chaîne correspond à une certaine expression régulière signifie généralement qu'une partie (ou plusieurs parties) de la chaîne peut satisfaire aux conditions données par l'expression.
Lors de l'écriture de programmes ou de pages Web qui traitent des chaînes, il est souvent nécessaire de trouver des chaînes qui correspondent à certaines règles complexes. Les expressions régulières sont des outils utilisés pour décrire ces règles. En d’autres termes, les expressions régulières sont des codes qui enregistrent des règles textuelles.
Il est très probable que vous ayez utilisé le caractère générique (wildcard) pour la recherche de fichiers sous Windows/Dos, c'est-à-dire * et ?. Si vous souhaitez trouver tous les documents Word dans un certain répertoire, vous rechercherez *.doc. Ici, * sera interprété comme n'importe quelle chaîne. Semblables aux caractères génériques, les expressions régulières sont également des outils utilisés pour la correspondance de texte, mais elles peuvent décrire vos besoins avec plus de précision que les caractères génériques - bien sûr, au prix d'être plus compliquées - par exemple, vous pouvez écrire une expression régulière, Utilisé pour rechercher toutes les chaînes commençant par 0, suivies de 2-3 chiffres, puis d'un trait d'union "-", et enfin d'une chaîne de 7 ou 8 chiffres (comme 010-12345678 ou 0376-7654321).
La meilleure façon d'apprendre les expressions régulières est de commencer par des exemples. Après avoir compris les exemples, vous pouvez ensuite modifier les exemples et expérimenter. Un certain nombre d'exemples simples sont donnés ci-dessous et sont expliqués en détail.
Supposons que vous recherchiez salut dans un roman anglais, vous pouvez utiliser l'expression régulière salut.
C'est presque l'expression régulière la plus simple. Elle peut correspondre avec précision à une telle chaîne : se compose de deux caractères, le premier caractère est h et le caractère suivant est i. Habituellement, les outils qui gèrent les expressions régulières fourniront une option pour ignorer la casse. Si cette option est cochée, elle peut correspondre à hi,HI ,Salut,hIN'importe laquelle de ces quatre situations.
Malheureusement, de nombreux mots contiennent les deux caractères consécutifssalut, comme lui,historique,haut et ainsi de suite. Si vous utilisez hi pour effectuer une recherche, le hi sera également trouvé. Si nous voulons rechercher avec précision le mot salut , nous devons utiliser /bhi/b.
/b est un code spécial spécifié par l'expression régulière (enfin, certaines personnes l'appellent métacaractère, métacaractère), qui représente le début ou la fin du mot , c'est-à-dire la limite du mot . Bien que les mots anglais soient généralement séparés par des espaces, des signes de ponctuation ou des sauts de ligne, /b ne correspond à aucun de ces caractères de séparation des mots, il correspond uniquement à Un emplacement .
Si vous avez besoin d'une déclaration plus précise,/b correspond à une position où le caractère précédent et le caractère suivant ne sont pas tous les deux (l'un est, l'autre n'est pas ou n'existe pas)/w.
Si vous cherchezsalut suivi non loin d'une Lucy , vous devriez utiliser /bhi/b.*/bLucy /b .
Ici,. est un autre métacaractère, correspondant à n'importe quel caractère à l'exception des sauts de ligne. * est aussi un métacaractère, mais il ne représente ni un caractère ni une position, mais une quantité - il précise que le contenu précédant * peut être réutilisé en continu N'importe quel nombre de fois pour que l'expression entière corresponde . Par conséquent, .* ensemble signifie n'importe quel nombre de caractères qui ne contiennent pas de sauts de ligne. Maintenant, la signification de /bhi/b.*/bLucy/b est évidente : est d'abord un mot salut, puis un nombre quelconque de caractères (mais not est un saut de ligne), et enfin le mot Lucy .
Le caractère de nouvelle ligne est '/n', le caractère avec le codage ASCII 10 (hexadécimal 0x0A).Si d'autres métacaractères sont utilisés ensemble, nous pouvons construire des expressions régulières plus puissantes. Par exemple, l'exemple suivant :
0/d/d-/d/d/d/d/d/d/d/d correspond à un tel chaîne : commence par 0, puis deux chiffres, puis un trait d'union "-", et enfin 8 chiffres (c'est-à-dire le numéro de téléphone de la Chine. Bien sûr, cet exemple ne peut correspondre qu'au situation où l'indicatif régional est composé de 3 chiffres).
Ici/d se trouve un nouveau métacaractère, correspondant à un chiffre (0, ou 1, ou 2, ou... ). - n'est pas un métacaractère et ne correspond qu'à lui-même - le trait d'union (ou le signe moins, ou le trait d'union, ou peu importe comment vous voulez l'appeler).
Pour éviter tant de répétitions gênantes, on peut aussi écrire cette expression comme ceci : 0/d{2}-/d{8}. Ici /d est suivi de {2}({8}) Cela signifie que le /d précédent doit être répété et assorti 2 fois (8 fois) .
Autres outils de test disponibles :
RegexBuddy
Javascript Regular outil de test d'expression en ligne
Si vous ne trouvez pas les expressions régulières difficiles à lire et à écrire, soit vous êtes un génie, soit vous n'êtes pas de la Terre. La syntaxe des expressions régulières peut prêter à confusion, même pour les personnes qui l'utilisent régulièrement. Parce qu’elles sont difficiles à lire et à écrire et sujettes aux erreurs, il est nécessaire de trouver un outil pour tester les expressions régulières.
Certains détails des expressions régulières sont différents selon les environnements. Ce tutoriel présente le comportement des expressions régulières sous Microsoft .Net Framework 2.0, je vais donc vous présenter un outil sous .Net Regex Tester. Assurez-vous d’abord que .Net Framework 2.0 est installé, puis téléchargez Regex Tester. Il s'agit d'un logiciel vert Après le téléchargement, ouvrez le package compressé et exécutez directement RegexTester.exe.
Ce qui suit est une capture d'écran de Regex Tester en cours d'exécution :
Vous connaissez déjà quelques métacaractères utiles, tels que /b,.,*, et / d. Il y a plus de métacaractères dans les expressions régulières, tels que /s correspond à n'importe quel caractère d'espacement , y compris les espaces, les caractères de tabulation (Tab ), les caractères de nouvelle ligne, les espaces chinois pleine chasse, etc. . /w correspond à lettres ou chiffres ou traits de soulignement ou caractères chinois, etc. .
Le traitement spécial des caractères chinois/chinois est pris en charge par le moteur d'expression régulière fourni par .Net. Pour plus de détails dans d'autres environnements, veuillez consulter les documents pertinents.
Voici quelques exemples supplémentaires :
/ba/w*/b correspond à avec la lettre a - d'abord le début d'un mot (/b), puis les lettres a , puis n'importe quel nombre de lettres ou de chiffres (/w*), et enfin la fin du mot (/b ).
D'accord, parlons maintenant de ce que signifient les mots dans l'expression régulière : pas moins d'un/w consécutif. Oui, cela n'a vraiment pas grand-chose à voir avec les milliers de choses portant le même nom qu'il faut mémoriser pour apprendre l'anglais :)
/d+matching1 ou plusieurs numéros consécutifs . Ici + est un métacaractère similaire à *, mais la différence est * les matchs répétés un certain nombre de fois (éventuellement 0 fois) , tandis que + matchs répétés 1 ou plusieurs fois .
/b/w{6}/b correspond à mots d'exactement 6 caractères .
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
/w | 匹配字母或数字或下划线或汉字 |
/s | 匹配任意的空白符 |
/d | 匹配数字 |
/b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
Les moteurs d'expressions régulières fournissent généralement une méthode pour "tester si une chaîne spécifiée correspond à une expression régulière", comme la méthode RegExp.test() en JavaScript ou la méthode Regex.IsMatch() en .NET. La correspondance ici fait référence à la question de savoir s'il existe une partie de la chaîne qui est conforme aux règles d'expression. Si vous n'utilisez pas ^ et $, pour /d{5,12} , l'utilisation de cette méthode ne peut garantir que la chaîne contient 5 à 12 chiffres consécutifs , plutôt que la chaîne entière soit de 5 à 12 chiffres.
métacaractères^ (un symbole sur la même touche que le chiffre 6) et $ correspondent tous deux à la position A , qui ressemble un peu à /b. ^ correspond au début de la chaîne que vous recherchez et $ correspond à la fin. Ces deux codes sont très utiles lors de la vérification du contenu saisi. Par exemple, si un site Web exige que le numéro QQ que vous remplissez soit composé de 5 à 12 chiffres, vous pouvez utiliser : ^/d{5,12. } $.
Le{5,12} ici est similaire au {2} introduit auparavant, seulement cependant, {2} correspond à et ne peut être répété que 2 fois , {5,12} signifie ne peut pas être répété moins de 5 fois et ne peut pas être répété plus de 12 fois , sinon cela ne correspondra pas.
Étant donné que^ et $ sont utilisés, la chaîne d'entrée entière doit être utilisée avec /d{5,12} pour correspondre, c'est-à-dire que l'intégralité de l'entrée doit être composée de 5 à 12 nombres , donc si l'entrée QQ Si le nombre peut correspondre à cette expression régulière, il répond aux exigences.
Semblable à l'option permettant d'ignorer la casse, certains outils de traitement d'expressions régulières ont également la possibilité de traiter plusieurs lignes. Si cette option est sélectionnée, la signification de^ et $ devient le début de la ligne correspondante de et fin .
le caractère s'échappe Si vous souhaitez retrouver le métacaractère lui-même, par exemple, vous recherchez., ou *, le problème se pose : vous ne pouvez pas les préciser, car ils seront interprétés comme autre chose. À ce stade, vous devez utiliser / pour annuler la signification particulière de ces caractères. Par conséquent, vous devez utiliser /. et /*. Bien entendu, pour trouver / lui-même, vous devez également utiliser //.
Par exemple :unibetter/.com correspond à unibetter.com, C://Windows correspond C:/Windows.
RépéterVous avez déjà vu les précédents*,+,{2},{5,12}Voici les moyens de faire correspondre les doublons. Voici tous les qualificatifs dans les expressions régulières (nombre spécifié de codes, tels que *, {5,12}, etc.) :
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
Voici quelques exemples d'utilisation de la répétition :
Windows/d+correspond à Windows suivi d'un ou plusieurs chiffres
^/w+ correspond au premier mot d'une ligne (ou au premier mot de la chaîne entière, spécifiquement Quelle signification à la correspondance dépend des paramètres des options)
Pour trouver des chiffres, des lettres ou des chiffres, des blancs, c'est très simple, car il y a déjà des caractères correspondants Des métacaractères pour un ensemble , mais que se passe-t-il si vous souhaitez faire correspondre un ensemble de caractères sans métacaractères prédéfinis (comme les voyelles a, e, i, o, u) ?
est très simple, il vous suffit de les lister entre crochets, comme [aeiou] correspondra à n'importe quel élément anglais Les lettres phonétiques , [.?!] correspondent à signes de ponctuation (. ou ? ou !) .
Nous pouvons également facilement spécifier un caractère plage , comme [0-9] représente la même signification /d est exactement le même : un chiffre de la même manière [a-z0-9A- Z_] est également complètement équivalent à /w (si seul l'anglais est pris en compte).
Voici une expression plus complexe :/(?0/d{2}[) -]?/d{8}.
"(" et ")" sont également des métacaractères, qui seront mentionnés plus tard dans la section de regroupement, ils doivent donc être échappés ici. Cette expression peut correspondre à desnuméros de téléphone dans plusieurs formats, comme (010)88886666, ou 022-22334455, ou 02912345678 etc. Faisons une analyse dessus : Tout d'abord, c'est un caractère d'échappement /(, qui peut apparaître 0 ou 1 fois (? ), puis un 0, suivi de 2 chiffres (/d{2}), puis ( ?), et enfin 8 chiffres (/d{8}). État de la brancheMalheureusement, l'expression à l'instant peut également correspondre à 010)12345678 ou (022 -87654321 est un format "incorrect". Pour résoudre ce problème, nous devons utiliser la
dans l'expression régulière Condition de branche<.> fait référence à plusieurs règles. Si l'une d'entre elles est respectée, elle doit être considérée comme une correspondance. La méthode spécifique consiste à utiliser | Ne pas séparer les règles. compris ? Ce n'est pas grave, regardez l'exemple : 0/d{2}-/d{8}|0/d{3}-/d {7} Cette expression peut correspondre à deux numéros de téléphone séparés par des traits d'union : l'un est un indicatif régional à trois chiffres et un numéro local à 8 chiffres (tel que 010-12345678). -un indicatif régional à chiffres et un indicatif local à 7 chiffres (0376-2233445)/(0/d{2}/)[- ]?/d {. 8}|0/d{2}[- ]?/d{8}
Cette expression correspond à un numéro de téléphone avec un indicatif régional à 3 chiffres, où l'indicatif régional peut être mis entre parenthèses, il n'est pas nécessaire de l'utiliser. L'indicatif régional et le numéro local peuvent être séparés par un trait d'union ou un espace, ou il ne peut y avoir aucune séparation . conditions de succursale pour étendre cette expression afin de prendre également en charge les indicatifs régionaux à 4 chiffres >.
/d{5}-/d{4}|/d{5}Cette expression est utilisée pour faire correspondre les codes postaux aux États-Unis. La règle pour les codes postaux américains est de 5 chiffres ou 9 chiffres séparés par des tirets. La raison pour laquelle cet exemple est donné est qu'il peut illustrer un problème : Lorsque vous utilisez des conditions de branchement, faites attention à l'ordre de chaque condition . Si vous le remplacez par /d{5}|/d{5}-/d{4}, alors uniquement les codes postaux à 5 chiffres (et les codes postaux à 9 chiffres) correspondront aux 5 premiers chiffres du code postal). La raison en est que lors de la correspondance des conditions de branche, chaque condition sera testée de gauche à droite. Si une certaine branche est remplie, les autres conditions ne seront pas prises en compte.
Nous avons déjà évoqué comment répéter un seul caractère (il suffit d'ajouter le qualificatif directement après le caractère) mais que se passe-t-il si vous souhaitez répéter plusieurs caractères ? Vous pouvez utiliser des parenthèses pour spécifier la sous-expression (également appelée regroupement), puis vous pouvez spécifier la sous-expression une fois que le nombre de répétitions est déterminé, vous pouvez également effectuer d’autres opérations sur les sous-expressions (elles seront présentées plus tard).
(/d{1,3}/.){3}/d{1,3} est une IP simple. l'adresse correspond à l'expression . Pour comprendre cette expression, analysez-la dans l'ordre suivant : /d{1,3} correspond à 1 à 3 chiffres, (/d{1,3}/.){3} correspond à trois chiffres plus un point anglais (le tout est ceciGroupe ) Répétez 3 fois , et enfin ajoutez un nombre de un à trois chiffres ( /d{1 ,3}).
Aucun nombre dans une adresse IP ne peut être supérieur à 255. Ne vous laissez pas tromper par les scénaristes de la saison 3 de « 24 »...
Malheureusement, cela correspondra également256.300.888.999Cette adresse IP ne peut pas exister. Si vous pouvez utiliser la comparaison arithmétique, vous pourrez peut-être résoudre ce problème simplement, mais les expressions régulières ne fournissent aucune fonction mathématique, vous ne pouvez donc utiliser que de longues classes de regroupement, de sélection et de caractères pour décrire une adresse IP correcte : ((2[0-4]/j|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/j|25 [0 -5]|[01]?/d/d?).
La clé pour comprendre cette expression est de comprendre 2[0-4]/d|25[0-5]|[01]?/d/d?, je n’entrerai pas dans les détails ici, vous devriez pouvoir analyser vous-même sa signification.
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!