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
Barbara StreisandOriginal
2024-12-21 09:32:21468Durchsuche

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)

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

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
}

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!

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