Heim >Backend-Entwicklung >Golang >Wie repliziere ich die Capturing-Gruppenfunktionalität von Ruby in Go Regex?

Wie repliziere ich die Capturing-Gruppenfunktionalität von Ruby in Go Regex?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-18 18:14:12798Durchsuche

How to Replicate Ruby's Capturing Group Functionality in Go Regex?

So emulieren Sie die Funktionalität von Ruby Capturing Group in Go Regex

Beim Übergang von Code von Ruby zu Go kann die Kompatibilität mit regulären Ausdrücken eine Herausforderung darstellen. Ruby nutzt PCRE, während Go Googles RE2 verwendet, sodass Entwickler Möglichkeiten zur Anpassung ihrer Ausdrücke benötigen.

Insbesondere die Erfassung der Gruppenfunktionalität, die die Extraktion spezifischer Daten aus übereinstimmenden Mustern ermöglicht, stellt eine Herausforderung dar. Um diese Funktionalität in Go zu replizieren, können die folgenden Schritte unternommen werden:

  1. Verwenden Sie benannte Erfassungsgruppen:
    Ersetzen Sie die in Ruby-Erfassungsgruppen verwendeten Klammern durch die Syntax (? P gefolgt vom Muster (?d{4}). (?Pd{4}).
  2. Querverweisgruppennamen:
    Rufen Sie die SubexpNames()-Methode für den kompilierten regulären Ausdruck auf, um eine Liste der Erfassungen zu erhalten Gruppennamen. Diese Informationen werden später zum Extrahieren der erfassten Daten verwendet.
  3. Extraktion mithilfe der Gruppe Namen:
    Um die Daten aus einer bestimmten Gruppe abzurufen, verwenden Sie die Syntax r.FindStringSubmatch(s)[Gruppenname], wobei r der kompilierte reguläre Ausdruck, s die Eingabezeichenfolge und Gruppenname der Name von ist die gewünschte Gruppe.

Zum Beispiel, um das Jahr aus einer Datumszeichenfolge mithilfe des regulären Ausdrucks zu extrahieren (?Pd{4})-(?Pd{2})-(?Pd{2}), würden Sie den folgenden Code verwenden:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    r := regexp.MustCompile(`(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})`)
    fmt.Printf("%#v\n", r.FindStringSubmatch(`2015-05-27`))
    fmt.Printf("%#v\n", r.SubexpNames())
}

Dieser Code würde Folgendes ausgeben:

[]string{"2015", "05", "27"}
[]string{""}

In der ersten Zeile werden die erfassten Werte der Reihe nach angezeigt, während in der zweiten Zeile die Namen der Erfassungsgruppen angezeigt werden. Durch die Verwendung dieser Techniken können Sie in Go eine ähnliche Erfassungsgruppenfunktionalität wie in Ruby erreichen.

Das obige ist der detaillierte Inhalt vonWie repliziere ich die Capturing-Gruppenfunktionalität von Ruby in Go Regex?. 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