Maison >développement back-end >tutoriel php >Apprenez les bases des expressions régulières

Apprenez les bases des expressions régulières

韦小宝
韦小宝original
2018-03-14 12:52:291394parcourir

Cet article parle des bases des expressions régulières de JavaScript Si vous n'êtes pas familier avec les expressions régulières JavaScript, vous pouvez simplement venir les apprendre. de JavaScript. Expressions régulières, pour ceux qui ne les connaissent pas, jetons-y un coup d'œil ensemble !

Expression régulièreApprentissage (mis à jour continuellement)

Aujourd'hui, j'ai appris l'objet RegExp lorsque j'apprenais le javascript , j'en ai profité pour apprendre les expressions régulières. Je n'y ai jamais été exposé auparavant, j'en ai donc profité pour les apprendre.

Site Web de référence : Tutoriel d'introduction de 30 minutes sur les expressions régulièresCliquez pour ouvrir le lien

1. Qu'est-ce qu'une expression régulière

Les expressions régulières sont utilisées pour exprimer des règles de correspondance chaînes .

2. Concepts associés aux expressions régulières

2.1Métacaractères

Les métacaractères sont spécifiés dans les expressions régulières Un symbole spécial ajouté à expressions régulières pour remplacer certaines règles.

b 表示单词的开始或结束
. 表示除换行以外的任意字符
*    表示*前面出现的任意个数的该字符,例如a*,表示前面有任意个数的a(重复0次或多次)
+ signifie n'importe quel nombre du caractère qui apparaît avant +, tel que a+, signifie qu'il y a n'importe quel nombre de caractères avant un (répéter 1 ou plusieurs fois)
+    表示+前面出现的任意个数的该字符,例如a+,表示前面有任意个数的a(重复1次或多次)
? 重复0或1次                                                                                                                                                                                                  
{n} 重复n次
{n, } 重复大于等于n次
{n, m} 重复n到m次
d   表示一个0-9的数字                                                                                                                    
w 匹配字母或数字或下划线或汉字                                                                         
s 匹配任意的空白符,包括空格、制表符、换行符、中文全角空格等
^ 匹配字符串的开始                                                                           
& 匹配字符串的结束

3. Expressions régulières simples

Partez directement de l'exemple :

Exemple 1 : Quand je veux faire correspondre le mot bonjour, l'expression régulière écrite L'expression (règle de correspondance) est : bonjour

Cela correspondra à tous les mots contenant bonjour, tels que : bonjourmonde correspond également, mais si vous voulez uniquement faire correspondre bonjour, alors vous avez besoin pour utiliser le métacaractère b pour séparer bonjour avant et après pour former un mot séparé bonjour, alors l'expression régulière doit être : bhellob

Exemple 2 : Quand tu veux Si le bonjour que vous recherchez est suivi d'un monde à n'importe quel caractère, vous devez utiliser les métacaractères et *. L'expression régulière est bhellob.*worldb

Exemple 3 : Lorsque vous souhaitez faire correspondre des numéros de téléphone comme 021-xxxxxxx, vous devez utiliser 021-ddddddd, où "021-" est un caractère simple qui ne représente aucun signification particulière, et ce qui suit Le d utilisé est un métacaractère. Cette expression régulière peut être abrégée en 021-d{7}, ce qui signifie que d est répété 7 fois.

Exemple 4 : Faire correspondre 1 ou plusieurs nombres consécutifs, d+

Exemple 5 : Faire correspondre des mots commençant par a, baw*b

Exemple 6 : Faire correspondre un numéro QQ de 5 à 12 chiffres, ^d{5, 12}&

4. Échappement de caractère

Si la chaîne que vous souhaitez rechercher contient des métacaractères, vous devez les ajouter devant les métacaractères pour convertir les métacaractères en caractères ordinaires.

5. Classe de caractères

Le problème résolu dans cette partie est de savoir quoi faire si les caractères que vous souhaitez faire correspondre n'ont pas de métacaractères correspondants, alors nous besoin de créer manuellement une classe de caractères.

Par exemple, s'il n'y a pas de d correspondant au nombre 0-9, alors lorsque nous voulons trouver n'importe quel nombre entre 0 et 9, nous pouvons créer une classe de caractères [0-9], qui fonctionne exactement comme d pareil.

Par exemple, les expressions régulières (?0d{2}[), -]?d{8} peuvent être utilisées pour faire correspondre les numéros de téléphone. Veuillez expliquer tour à tour

( représente un échappement (,. ? signifie qu'il se répète 0 ou 1 fois, d signifie deux nombres, [), -] signifie la classe de caractères de ) et -, ? signifie qu'il se répète 0 ou 1 fois, suivi de 8 chiffres.

6. Conditions de branchement

Ce qui est écrit ci-dessus

(?0d{2}[), -]?d{8} est comme ces expressions régulières peuvent correspondre à des chaînes incorrectes telles que (01012345678 ou (010-12345678). Dans de tels cas, vous pouvez utiliser des conditions de branchement. Les conditions de branchement sont similaires à la logique ou || dans js, et elles sont toutes court-circuitées Opérateur , se termine lorsqu'une condition peut être jugée de gauche à droite

Pour la situation ci-dessus, elle peut s'écrire (0d{2})d{8. } |0d{2}-d{8}|(0d{2})d{8}

7. Cette partie Afin de résoudre le problème de la répétition non pas d'un seul caractère, mais de plusieurs caractères, nous pouvons utiliser le qualificatif dans caractère + métacaractère lors de la répétition d'un seul caractère, mais lorsqu'il y a plusieurs caractères répétitifs, nous pouvons les ajouter en plus du caractères répétitifs (). Par exemple, l'expression régulière suivante peut être utilisée pour représenter l'adresse IP ?.){3}(2[0-4]d|25[0-5]|[01]?dd? )

8. Antonym

Lorsque vous avez besoin de trouver des caractères qui ne peuvent pas être facilement définis, tels que des caractères autres que xxx, vous devez l'utiliser Antony

tbody>
W
W

匹配任意不是字母、数字、下划线、汉字的字符

D 匹配任意不是数字的字符
B 匹配任意不是单词开头或结束位置的字符
S 匹配任意不是空白的字符
[^x] 匹配除了x以外的字符
[^aeiou] 匹配除了aeiou之外的字符
correspond à tout caractère qui n'est pas des lettres, des chiffres, des traits de soulignement ou des caractères chinois

D Correspond à tout caractère qui n'est pas un nombre
B Faire correspondre n'importe quel caractère qui n'est pas le début ou la fin d'un mot
S Correspond à tout caractère qui n'est pas un espace
[^x] Correspond à tout sauf x caractères autres que aeiou
[^aeiou] Correspond à des caractères autres que aeiou
Par exemple, l'expression régulière ^S+& est utilisée pour faire correspondre une chaîne de caractères sans espace chaîne

9.Référence arrière

Le contenu de cette partie correspond au regroupement précédent lorsque nous utilisons () pour regrouper les caractères, nous pourrons continuer à faire référence à ce regroupement par numérotation plus tard. Pour le regroupement par (), le regroupement commence à 1 dans l'ordre d'apparition de (. Par exemple, l'expression régulière b(w+)s+1b peut être utilisée. pour correspondre aux occurrences répétées, les mots, tels que go go, etc., font ici référence au regroupement apparaissant précédemment via 1.

Les autres syntaxes de référence arrière impliquées sont :

(exp) 匹配exp,并捕获当前内容到自动的分组里                                                                            
(?exp) 匹配exp,并捕获当前内容并分配组名为name
(?:exp) 匹配exp,不为捕获的内容分配组名
.

10. L'assertion de largeur nulle

est utilisée pour trouver la partie avant ou après une certaine partie du contenu mais n'inclut pas le contenu.

L'expression régulière (?=exp) signifie affirmer que la partie qui apparaît plus tard peut correspondre à l'expression exp. Par exemple, bw+(?=ingb) correspond à la partie avant des mots se terminant par ing. Par exemple, lors de la recherche de Je danse et chante, danse et chant seront mis en correspondance (puisqu'il y a w+, ils ne seront pas mis en correspondance avec s).

L'expression régulière (?<=exp) signifie affirmer que la partie précédente peut correspondre à l'expression exp. Par exemple, (?<=bre)w+b correspondra à la seconde moitié du mot commençant par re. Par exemple, lors d'une recherche de lecture, ading sera mis en correspondance. .

Si vous souhaitez ajouter une virgule tous les trois chiffres d'un nombre long, par exemple en ajoutant une virgule à 123456789, vous pouvez utiliser l'expression régulière ((?<=d) d{3 })+b, le résultat de la recherche est 234567890 (je ne comprends pas cette partie des règles de recherche...)

L'exemple suivant utilise deux assertions en même temps time (?=

De manière générale, le but de l'assertion de largeur nulle est de déterminer le point de départ ou le point d'arrivée des caractères correspondants selon certaines règles.

11. Assertion négative de largeur nulle

Comme mentionné précédemment, utilisez des antonymes pour trouver des caractères qui ne sont pas un certain caractère ou ne sont pas dans un certain caractère.

Par exemple, si vous souhaitez trouver un mot où la lettre q apparaît mais n'est pas suivie de u. Vous pourriez écrire bq[^u]w*b. Mais pour une telle expression, une erreur se produira lorsque q apparaîtra à la fin d'un mot, car [^u] correspondra au caractère séparateur du mot, qui correspondra alors au mot suivant, qui correspondra à des caractères tels que les combats en Irak. . chaîne.

Afin de résoudre le problème d'occupation des antonymes, nous pouvons utiliser une assertion négative de largeur nulle, car elle ne correspond qu'à une seule position et ne consomme aucun caractère. L'expression ci-dessus peut être écrite sous la forme bq(?!u)w*b.

De même, nous utilisons (?

Un exemple plus complexe : (?<=<(w+)>).*(?=)

Lorsque vous voyez le précédent (?<=) et le suivant (?=), vous savez que le recto et le verso sont des assertions de largeur nulle, et < ;(w+)> ; représente la balise html. Si la précédente est , l'assertion de largeur nulle suivante signifie (les échappements et les références arrière sont utilisés). Cette expression régulière consiste donc à faire correspondre les parties entre les balises HTML.

12. Commentaires

Contenir des commentaires via la syntaxe (?#comment), Par exemple, 2[0-4]d(?#200-249).

13. Cupidité et paresse

Lorsqu'il s'agit de problèmes de correspondance de chaînes, le comportement habituel est de faire correspondre autant de caractères que possible. En prenant l'expression a.*b et la chaîne aabab comme exemple, aabab sera mis en correspondance au lieu de ab. Cette règle de correspondance est appelée correspondance gourmande.

Parfois, nous devons faire correspondre la correspondance paresseuse avec le moins de caractères possible. Dans ce cas, devons-nous l'ajouter après le qualificatif mentionné ci-dessus ? , comme a.*?b convertira la correspondance gourmande en correspondance paresseuse. À ce stade, aab (caractères 1 à 3) et ab (caractères 4 à 5) seront mis en correspondance (la raison spécifique implique les règles de correspondance des expressions régulières). .

14. Options de traitement

Semblable au drapeau en js, il existe l'insensibilité à la casse, le mode multi-ligne, le mode global, etc.

15. Groupe équilibré/correspondance récursive

Cette partie consiste à traiter le problème de correspondance, par exemple, si vous souhaitez faire correspondre l'expression mathématique ( 5*3))) (5*3) ne peut pas simplement être écrit sous la forme (.*), car cela correspondra à l'expression entière. Ensuite, la stratégie de correspondance à adopter est similaire au problème de correspondance entre parenthèses que nous avons appris. Utilisez la pile pour le résoudre. Lorsque vous rencontrez (appuyez sur la pile, rencontrez) un éclatement de la pile, si la dernière pile est vide, cela signifie que la pile est vide. les parenthèses dans l'expression correspondent complètement. Si elle n'est pas vide, le moteur d'expression régulière fera marche arrière pour que les parenthèses correspondent.

Recommandations associées :

Comment utiliser les expressions régulières en JS


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