Dans cet article, l'éditeur PHP Xiaoxin vous présentera les expressions régulières à répétitions imbriquées. Les expressions régulières sont un puissant outil de correspondance de chaînes qui peut être utilisé pour rechercher, remplacer et valider des chaînes. La répétition imbriquée fait référence à l'utilisation d'un ou plusieurs modèles répétés dans une expression régulière, et ces modèles répétés peuvent être imbriqués dans d'autres modèles. Cette technique peut être utilisée pour faire correspondre du texte avec une structure hiérarchique, telle que des balises HTML, des crochets imbriqués, etc. En comprenant la syntaxe et l'utilisation des expressions régulières répétées imbriquées, nous pouvons gérer avec plus de flexibilité divers besoins de correspondance de chaînes complexes.
J'essaie de créer une expression régulière en go qui correspond à jusqu'à 50 mots séparés par des espaces, où chaque mot est compris entre 1 et 32 "a". J'utilise l'expression régulière suivante
regexp.compile(`^(a{1,32}\s?){1,50}$`)
J'obtiens l'erreur suivante
error parsing regexp: invalid repeat count: `{1,50}`
J'ai remarqué que cela peut être répété jusqu'à 31 fois, comme ça
r, err := regexp.Compile(`^(a{1,32}\s?){1,31}$`)
Voir https://go.dev/play/p/rlnrox9-57_m
Le moteur regexp
de Go a une limite où la combinaison du niveau supérieur et des répétitions internes ne doit pas dépasser 1 000 copies de la répétition la plus interne partie . Ceci est documenté dans la spécification de grammaire re2.
Dans votre cas, jusqu'à 31 fonctionne car 32 interne * 31 externe = 992. 32 * 32 = 1024 et 32 * 50 = 1600 ne fonctionneront pas au-delà de cette limite.
La solution est de diviser l'expression en parties : ^(a{1,32}s?){1,31}(a{1,32}s?){0,19}$
p>
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!