Heim > Backend-Entwicklung > Golang > Wie finde ich effizient alle Regex-Übereinstimmungen in einem Go-String?

Wie finde ich effizient alle Regex-Übereinstimmungen in einem Go-String?

Barbara Streisand
Freigeben: 2024-12-21 09:32:21
Original
505 Leute haben es durchsucht

How to Efficiently Find All Regex Matches in a Go String?

Übereinstimmungen mit Regex in Go finden

Bei der Arbeit mit Go kann es sein, dass Sie bestimmte Muster innerhalb von Zeichenfolgen mithilfe regulärer Ausdrücke abgleichen müssen. So erreichen Sie dies mit dem Regexp-Paket:

Frage:

Wie kann ich alle Übereinstimmungen für einen angegebenen regulären Ausdruck innerhalb einer bestimmten Zeichenfolge finden und sie als zurückgeben? Array?

Beispiel:

Betrachten Sie die Zeichenfolge: „{city}, {state} {zip}“. Das Ziel besteht darin, ein Array zurückzugeben, das alle in geschweiften Klammern eingeschlossenen Teilzeichenfolgen enthält.

Erster Versuch:

Mit dem Regexp-Paket haben Sie möglicherweise den folgenden Code ausprobiert:

r := regexp.MustCompile("/({[^}]*})/")
matches := r.FindAllString("{city}, {state} {zip}", -1)
Nach dem Login kopieren

Dieser Code gibt jedoch ein leeres Slice zurück, was darauf hinweist, dass es keine Übereinstimmungen gab gefunden.

Lösung:

Um dieses Problem zu beheben, beachten Sie die folgenden Schritte:

  1. Entfernen Sie unnötige Regex-Trennzeichen (z. B. /) .
  2. Verwenden Sie rohe String-Literale, um Regex-Muster zu definieren, die es Ihnen ermöglichen, Metazeichen mit einem Single zu maskieren Backslash.
  3. Entfernen Sie die einfangende Gruppe aus dem Regex-Muster, um die gesamte übereinstimmende Zeichenfolge ohne die geschweiften Klammern zu erhalten.

Für alle Übereinstimmungen:

r := regexp.MustCompile(`{[^{}]*}`)
matches := r.FindAllString("{city}, {state} {zip}", -1)
fmt.Println(matches) // Prints: [{city}, {state}, {zip}]
Nach dem Login kopieren

Nur ​​für erfasste Teile:

r := regexp.MustCompile(`{([^{}]*)}`)
matches := r.FindAllStringSubmatch("{city}, {state} {zip}", -1)
for _, v := range matches {
    fmt.Println(v[1]) // Prints: city, state, zip
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie finde ich effizient alle Regex-Übereinstimmungen in einem Go-String?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage