Maison  >  Article  >  interface Web  >  Expressions régulières (grammaire)

Expressions régulières (grammaire)

亚连
亚连original
2018-05-21 09:35:441204parcourir

Maintenant, je vais vous apporter un article sur les expressions régulières (recommandation de grammaire). Permettez-moi de le partager avec vous maintenant et de le donner comme référence pour tout le monde.

Résumé de la construction de l'expression régulière

Correspondance de construction

Caractère

x Caractère x
\ caractère barre oblique inverse

(?:X) X, en tant que groupe non capturant
(?idmsux-idmsux) Rien, mais correspondra au drapeau id m s u Définir le groupe non capturant i d m s u x on - off
(?= X) X) X, via un lookbehind positif de largeur nulle
(?------------------------------ ----------------------



Barre oblique inverse, évasion et citation

Le caractère barre oblique inverse ('') est utilisé pour les constructions d'échappement entre guillemets, comme indiqué dans le tableau défini ci-dessus, et est également utilisé pour faire référence à d'autres caractères qui seront interprétés comme des constructions sans échappement. Par conséquent, l’expression \ correspond à une seule barre oblique inverse et { correspond à une parenthèse ouvrante. C'est une erreur d'utiliser une barre oblique inverse avant tout caractère alphabétique qui ne représente pas une construction d'échappement ; ils sont réservés aux futures extensions du langage d'expression régulière. Une barre oblique inverse peut être utilisée avant un caractère non alphabétique, que le caractère fasse ou non partie d'une construction sans échappement. Les barres obliques inverses dans les chaînes du code source Java sont interprétées comme des échappements Unicode ou d'autres échappements de caractères, comme l'exige la spécification du langage Java. Par conséquent, vous devez utiliser deux barres obliques inverses dans la chaîne littérale pour indiquer que l'expression régulière est protégée contre l'interprétation par le compilateur de bytecode Java. Par exemple, lorsqu'il est interprété comme une expression régulière, la chaîne littérale « b » correspond à un seul caractère de retour arrière, tandis que « \b » correspond à la limite d'un mot. La chaîne littérale "(hello)" est illégale et provoquera une erreur de compilation ; pour correspondre à la chaîne (hello), la chaîne littérale "\(hello\)" doit être utilisée.

Classes de caractères

Les classes de caractères peuvent apparaître au sein d'autres classes de caractères et peuvent contenir l'opérateur d'union (implicite) et l'opérateur d'intersection (&&). L'opérateur union représente une classe qui contient tous les caractères d'au moins une de ses classes d'opérandes. L'opérateur d'intersection représente une classe qui contient tous les caractères présents dans ses deux classes d'opérandes.

La priorité des opérateurs de classe de caractères est la suivante, du plus élevé au plus bas :

1 Valeur littérale échappant x

2 Regroupement [ ...]

3 Plage a-z 4 Union [a-e][i-u] 5 Intersection [a-z&&[aeiou]]

Notez que différents ensembles de métacaractères sont en fait situés à l'intérieur d'une classe de caractères, pas en dehors. Par exemple, l'expression régulière . perd sa signification particulière au sein d'une classe de caractères, tandis que l'expression - devient une plage formant des métacaractères.



Terminateur de ligne

Le terminateur de ligne est une séquence d'un ou deux caractères qui marque la fin d'une ligne pour une séquence de caractères saisis. Les codes suivants sont reconnus comme terminateurs de ligne : caractère de nouvelle ligne (saut de ligne) ('n'), caractère de retour chariot ("rn") suivi d'un caractère de nouvelle ligne, seul retour chariot ('r'),

caractère de ligne suivante ('u0085'),

séparateur de ligne ('u2028') ou

séparateur de paragraphe ('u2029).

Si le mode UNIX_LINES est activé, le caractère de nouvelle ligne est le seul terminateur de ligne reconnu.

Si l'indicateur DOTALL n'est pas spécifié, l'expression régulière peut correspondre à n'importe quel caractère (sauf les terminateurs de ligne).

Par défaut, les expressions régulières ^ et $ ignorent les terminateurs de ligne et ne correspondent respectivement qu'au début et à la fin de toute la séquence d'entrée. Si le mode MULTILINE est activé, la correspondance ^ se produit au début de la saisie et après la fin de la ligne (à la fin de la saisie). En mode MULTILINE, $ correspond uniquement avant un terminateur de ligne ou à la fin de la séquence d'entrée.

Groupes et captures

Les groupes de capture peuvent être numérotés en comptant leurs parenthèses d'ouverture de gauche à droite. Par exemple, dans l'expression ((A)(B(C))), il existe quatre de ces groupes : 1 ((A)(B(C))) 2 A 3 (B(C))

4 (C)

Le groupe zéro représente toujours l'expression entière.


Les groupes de capture sont nommés de cette façon car dans la correspondance, chaque sous-séquence de la séquence d'entrée qui correspond à ces groupes est enregistrée. La sous-séquence capturée peut ensuite être utilisée dans une expression via une référence Back, ou peut être obtenue auprès du matcher une fois l'opération de correspondance terminée.

L'entrée de capture associée à un groupe est toujours la sous-séquence correspondante la plus proche du groupe. Si un groupe est calculé à nouveau en raison de la quantification, sa valeur précédemment capturée (le cas échéant) sera conservée lorsque le deuxième calcul échoue. Par exemple, en comparant la chaîne « aba » avec l'expression (a(b) ?)+ correspond, définit. le deuxième groupe à "b". Au début de chaque correspondance, toutes les entrées capturées sont supprimées.

Un groupe commençant par (?) est un groupe pur sans capture, qui ne capture pas de texte et ne compte pas dans le total combiné.

J'ai compilé ce qui précède pour vous, j'espère que cela vous sera utile à l'avenir.

Articles connexes :

Quels sont les scénarios courants dans lesquels les fermetures peuvent être exploitées en JS ? (Tutoriel image et texte)

Comment copier un objet en js ? (Tutoriel image et texte)

Un exemple d'utilisation de js pour implémenter un forum de messages (code fourni)

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