Maison  >  Article  >  développement back-end  >  Comment le composant d'expression régulière "[^][]" fonctionne-t-il pour faire correspondre les crochets imbriqués ?

Comment le composant d'expression régulière "[^][]" fonctionne-t-il pour faire correspondre les crochets imbriqués ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-07 07:03:02580parcourir

How does the

Que signifie l'expression régulière "[^][]" ?

Dans l'expression régulière fournie :

\[(?:[^][]|(?R))*\]

le composant regex "[^][]" est une classe de caractères qui correspond à n'importe quel caractère sauf "[" ou "]".

Explication de la classe de caractères

A La classe de caractères correspond à n'importe quel caractère dans la plage de caractères donnée. Dans ce cas, "[^]" signifie "non suivi de ]", donc "[^][]" correspond effectivement à tout caractère qui n'est pas suivi de "]".

Récursion Regex

Les parenthèses autour de "[^][]" indiquent un groupe non capturant. À l'intérieur du groupe, le jeton « ?R » représente une référence récursive à l'intégralité de l'expression régulière. Cela permet à l'expression régulière de correspondre aux crochets imbriqués.

Éviter les séquences d'échappement

Notez que, dans PCRE (le moteur d'expression régulière utilisé par les fonctions preg_ de PHP), ce n'est pas nécessaire pour échapper "[" ou "]" dans une classe de caractères. En effet, il est sans ambiguïté que le "]" dans "[^][]" appartient à la classe de caractères.

Modificateur xx en ligne (PHP 7.3)

Dans PHP 7.3, vous pouvez utiliser le modificateur xx en ligne pour ignorer les caractères vides dans les classes de caractères. Cela vous permet d'écrire les classes moins ambiguës suivantes :

(?xx) [^ ][ ]     [ ] ]      [ [ ]      [^ [ ]

Compatibilité et bizarreries

La syntaxe "[^][]" est compatible avec la plupart des versions d'expressions régulières. , notamment PCRE, Perl, Python, Java et autres. Cependant, il n'est pas reconnu dans Ruby et JavaScript (sauf dans les anciennes versions d'Internet Explorer).

Correspondance entre crochets imbriqués

Dans le contexte de votre exemple d'expression régulière, "[^][]" garantit que les crochets équilibrés correspondent, ce qui permet la correspondance des crochets imbriqués.

Remarques supplémentaires

  • "[^ ]]" est sans ambiguïté car "[^]" correspond à des caractères non suivis de "]", donc le "]" suivant appartient à la classe de caractères.
  • Les navigateurs JavaScript modernes suivent généralement la spécification ECMA, qui définit " []" comme jeton d'expression régulière qui ne correspond toujours pas.
  • L'expression régulière optimisée fournie "([[^][](?:(?-1)[^][] )* ])" améliore les performances en évitant les alternances inutiles.

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