Maison  >  Article  >  développement back-end  >  Que fait la classe de caractères « [^][] » dans une expression régulière ?

Que fait la classe de caractères « [^][] » dans une expression régulière ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-07 00:47:02271parcourir

What does the character class

Décodage de la classe de caractères "[^][]"

Dans l'expression régulière [(?:[^][]|(? R))*], la classe de caractères "[^][]" soulève une question particulière. Élucidons sa signification et dissipons toute ambiguïté.

Signification de "[^][]"

"[^][]" est une classe de caractères qui correspond à n'importe quel caractère sauf "[" et "]". Cette expression exclut effectivement "[" et "]" de l'ensemble des caractères correspondants.

Résolution d'ambiguïté

Certains diront que la séquence "[^]" est ambigu, conduisant à une interprétation possible comme une évasion pour "^" et un "]" littéral. Cependant, PCRE, le moteur d'expression régulière utilisé par les fonctions preg_, résout cette ambiguïté. Étant donné que "[^]" n'est pas valide dans PCRE, l'analyse interprète "]" comme étant enfermé dans la classe de caractères, laissant la classe fermée par un "]" ultérieur.

Règles contextuelles supplémentaires

  • "[^]" peut être écrit comme "1" ou "[^][]" sans échapper au "[" ou "]".
  • Le modificateur "xx" en ligne dans PHP 7.3 élimine le besoin d'échappement même au sein des classes de caractères.
  • Le premier caractère de la classe de caractères détermine l'interprétation. "[^]]" correspond à n'importe quel caractère suivi de "]", tandis que "2]" correspond à un non-"a" suivi de "]".
  • En JavaScript, "[]" est défini comme un jeton qui ne correspond jamais, tandis que "[^]" correspond à n'importe quel caractère.
  • Le modèle d'expression régulière fourni [(?:[^][]|(?R ))*] correspond aux crochets, permettant la récursivité pour les crochets imbriqués.
  • Un modèle plus efficace et réutilisable pour faire correspondre les crochets est "([[^][](?:(?-1)[ ^][])* ])".

Conclusion

La classe de caractères "[^][]" exclut simplement les caractères " [" et "]" de la correspondance. Cette interprétation est cohérente dans tous les moteurs compatibles PCRE, y compris JavaScript (à quelques exceptions près). En comprenant ces règles, les programmeurs peuvent utiliser efficacement cette classe de caractères dans leurs modèles d'expression régulière.


  1. a

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