Maison > développement back-end > Golang > 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
Libérer: 2024-10-27 02:39:30
original
880 Les gens l'ont consulté

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]+)(?: "([^"]+)")+`)
Copier après la connexion
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])
    }
}
Copier après la connexion

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!

source:php.cn
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