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:
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!