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