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

DDD
Freigeben: 2024-10-27 02:39:30
Original
793 Leute haben es durchsucht

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]+)(?: "([^"]+)")+`)
Nach dem Login kopieren

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])
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!