Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erfasst man in Go mehrere Argumente in Anführungszeichen in einem regulären Ausdruck?

Wie erfasst man in Go mehrere Argumente in Anführungszeichen in einem regulären Ausdruck?

DDD
DDDOriginal
2024-10-27 02:39:30781Durchsuche

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

Wiederholte Gruppen in GO erfassen

Ihr regulärer Ausdruck ([A-Z] )(?: "([^"] )")* ist darauf ausgelegt, ein Wort in Großbuchstaben zu erfassen, gefolgt von null oder mehr Argumenten in doppelten Anführungszeichen. Wie Sie jedoch festgestellt haben, erfasst es nur das letzte Argument.

Verstehen des Regex

Der reguläre Ausdruck besteht aus zwei Erfassungsgruppen:

  1. ([A-Z] ): Entspricht dem Großbuchstabenwort.
  2. (?: "([^"] )")*: Entspricht ein Argument in doppelten Anführungszeichen. Das * gibt an, dass sich diese Gruppe null oder mehrmals wiederholen kann.

Das Problem entsteht, weil die zweite Gruppe in Klammern steht, die sich auf eine nicht erfassende Gruppe beziehen. Das bedeutet, dass die Regex zwar mit mehreren Argumenten übereinstimmt, aber nur das letzte in der Ergebnisvariablen speichert.

Lösung

Um alle Argumente zu erfassen, ändern Sie die Regex wie folgt:

re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")+`)

Indem Sie das Sternchen * durch ein Pluszeichen ersetzen, ist die zweite Gruppe nun eine Erfassungsgruppe.

Beispielcode

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])
    }
}

Spielplatz

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

Das obige ist der detaillierte Inhalt vonWie erfasst man in Go mehrere Argumente in Anführungszeichen in einem regulären Ausdruck?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn