Capturer plusieurs groupes cités dans Go
Cet article aborde le défi de l'analyse des chaînes qui suivent un format spécifique : une commande majuscule suivie d'une option facultative. arguments cités. Le but est d'extraire à la fois la commande et les arguments sous forme de chaînes distinctes.
Pour gérer cette tâche, une expression régulière est utilisée : re1, _ := regexp.Compile(([A-Z] )(?: " (1 )")*). Le premier groupe de capture ([A-Z] ) correspond à la commande majuscule, tandis que le deuxième groupe de capture (?: "([^"] )")* correspond à zéro ou plusieurs arguments cités.
Cependant, le code fourni capture uniquement le dernier argument. Pour résoudre ce problème, une expression régulière plus souple est suggérée : re1, _ := regexp.Compile(([A-Z] )|(?: "(1 )")). Cette expression régulière utilise une union | pour autoriser soit une commande, soit un argument.
En modifiant le code en :
<code class="go">re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`) results := re1.FindAllStringSubmatch(`COMMAND "arg1" "arg2" "arg3"`, -1) fmt.Println("Command:", results[0][1]) for _, arg := range results[1:] { fmt.Println("Arg:", arg[2]) }</code>
tous les arguments peuvent désormais être capturés avec succès. Cette expression régulière révisée est plus polyvalente et s'adapte aux variations de format d'entrée où les commandes et les arguments peuvent apparaître dans des ordres différents.
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!