Reguläre Ausdrücke in Go: vollständige Analyse mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Reguläre Ausdrücke in Go mit Beispielen: in der Praxis

\n\n

Reguläre Ausdrücke (regexp) sind ein leistungsstarkes Werkzeug zum Suchen, Extrahieren und Ersetzen von Text nach einem Muster. In Go (Golang) wird die Arbeit mit regulären Ausdrücken über das Standardpaket regexp realisiert. In diesem Artikel werden wir die wichtigsten Funktionen, die Syntax und praktische Beispiele durchgehen, die Ihnen helfen, reguläre Ausdrücke sicher in Ihren Projekten zu verwenden.

\n\n

Grundlagen des Pakets regexp

\n\n

Das Paket regexp bietet zwei Hauptmethoden zur Kompilierung eines regulären Ausdrucks:

\n\n
    \n
  • regexp.Compile(pattern string) (*Regexp, error) — kompiliert das Muster und gibt ein Regexp-Objekt oder einen Fehler zurück, wenn das Muster ungültig ist.
  • \n
  • regexp.MustCompile(pattern string) *Regexp — dasselbe, löst aber bei einem Fehler einen panic aus. Praktisch für statische Muster, die zur Initialisierungszeit definiert werden.
  • \n
\n\n

Es wird empfohlen, MustCompile für Muster zu verwenden, die garantiert korrekt sind (z. B. im Code festgelegt), und Compile für dynamische Muster, die vom Benutzer oder aus einer externen Quelle stammen.

\n\n

Beispiel 1: Suchen einer Teilzeichenkette (FindString)

\n\n

Die Funktion FindString gibt die erste Übereinstimmung mit dem Muster als Zeichenkette zurück. Wenn keine Übereinstimmung gefunden wird, wird eine leere Zeichenkette zurückgegeben.

\n\n
package main\n\nimport (\n    "fmt"\n    "regexp"\n)\n\nfunc main() {\n    text := "Meine E-Mail: example@mail.com, Ersatz: test@example.org"\n    pattern := `[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}`\n\n    re := regexp.MustCompile(pattern)\n    match := re.FindString(text)\n\n    fmt.Println("Gefundene E-Mail:", match) // Ausgabe: example@mail.com\n}
\n\n

Beispiel 2: Suchen aller Übereinstimmungen (FindAllString)

\n\n

Wenn Sie alle Übereinstimmungen finden müssen, verwenden Sie FindAllString. Das zweite Argument ist die maximale Anzahl von Übereinstimmungen (-1 für alle).

\n\n
package main\n\nimport (\n    "fmt"\n    "regexp"\n)\n\nfunc main() {\n    text := "Codes: ABC-123, XYZ-456, QWE-789"\n    pattern := `[A-Z]{3}-\\d{3}`\n\n    re := regexp.MustCompile(pattern)\n    matches := re.FindAllString(text, -1)\n\n    fmt.Println("Gefundene Codes:", matches)\n    // Ausgabe: [ABC-123 XYZ-456 QWE-789]\n}
\n\n

Beispiel 3: Text ersetzen (ReplaceAllString)

\n\n

ReplaceAllString ersetzt alle Übereinstimmungen des Musters durch die angegebene Zeichenkette. Sie können Erfassungsgruppen mit der Syntax $1, $2 usw. verwenden.

\n\n
package main\n\nimport (\n    "fmt"\n    "regexp"\n)\n\nfunc main() {\n    text := "Datum: 2024-01-15, weiteres Datum: 2023-12-31"\n    pattern := `(\\d{4})-(\\d{2})-(\\d{2})`\n\n    re := regexp.MustCompile(pattern)\n    // Format von JJJJ-MM-TT auf TT.MM.JJJJ ändern\n    result := re.ReplaceAllString(text, "$3.$2.$1")\n\n    fmt.Println("Ergebnis:", result)\n    // Ausgabe: Datum: 15.01.2024, weiteres Datum: 31.12.2023\n}
\n\n

Beispiel 4: Prüfen, ob eine Zeichenkette dem Muster entspricht (MatchString)

\n\n

Die Funktion MatchString gibt true zurück, wenn die Zeichenkette mindestens eine Übereinstimmung mit dem Muster enthält.

\n\n
package main\n\nimport (\n    "fmt"\n    "regexp"\n)\n\nfunc main() {\n    emails := []string{"user@example.com", "invalid-email", "admin@site.org"}\n    pattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$`\n\n    re := regexp.MustCompile(pattern)\n    for _, email := range emails {\n        if re.MatchString(email) {\n            fmt.Printf("'%s' — gültige E-Mail\\n", email)\n        } else {\n            fmt.Printf("'%s' — KEINE gültige E-Mail\\n", email)\n        }\n    }\n    // Ausgabe:\n    // 'user@example.com' — gültige E-Mail\n    // 'invalid-email' — KEINE gültige E-Mail\n    // 'admin@site.org' — gültige E-Mail\n}
\n\n

Beispiel 5: Daten mit Erfassungsgruppen extrahieren (FindStringSubmatch)

\n\n

FindString

Blogs

Buchempfehlungen