Maison  >  Article  >  développement back-end  >  Comment capturer plusieurs arguments cités dans une expression régulière en Go ?

Comment capturer plusieurs arguments cités dans une expression régulière en Go ?

DDD
DDDoriginal
2024-10-27 02:39:30781parcourir

How to Capture Multiple Quoted Arguments in a Regular Expression in Go?

Capturer des groupes répétés dans GO

Votre expression régulière ([A-Z] )(?: "([^"] )")* est conçu pour capturer un mot majuscule suivi de zéro ou plusieurs arguments entre guillemets. Cependant, comme vous l'avez découvert, il ne capture que le dernier argument.

Comprendre l'expression régulière

L'expression régulière se compose de deux groupes de capture :

    ([A-Z] ) : correspond au mot majuscule.
  1. (?: "([^"] )")* : correspond un argument entre guillemets. Le * indique que ce groupe peut se répéter zéro ou plusieurs fois.
Le problème se pose car le deuxième groupe est placé entre parenthèses qui font référence à un groupe non capturant. Cela signifie que même si l'expression régulière correspond à plusieurs arguments, elle ne stocke que le dernier dans la variable de résultats.

Solution

Pour capturer tous les arguments, modifiez l'expression régulière comme suit :

re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")+`)
En remplaçant l'astérisque * par un plus , le deuxième groupe est désormais un groupe de capture.

Exemple de code

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")+`)
    results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)

    fmt.Println("Command:", results[0][1])
    for _, arg := range results[1:] {
        fmt.Println("Arg:", arg[2])
    }
}

Aire de jeux

https://play.golang.org/p/8WmZ0yuHZjj

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