Maison > développement back-end > Golang > Expression régulière avec répétitions imbriquées

Expression régulière avec répétitions imbriquées

王林
Libérer: 2024-02-08 21:20:30
avant
1233 Les gens l'ont consulté

Expression régulière avec répétitions imbriquées

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.

Contenu de la question

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}$`)
Copier après la connexion

J'obtiens l'erreur suivante

error parsing regexp: invalid repeat count: `{1,50}`
Copier après la connexion

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}$`)
Copier après la connexion

Voir https://go.dev/play/p/rlnrox9-57_m

Workaround

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!

source:stackoverflow.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal