Reguläre Ausdrücke in Go (Golang): Vollständiger Leitfaden für Anfänger
Reguläre Ausdrücke (regex) sind ein leistungsstarkes Werkzeug zum Suchen, Extrahieren und Ersetzen von Text nach bestimmten Mustern. In der Sprache Go (Golang) wird die Arbeit mit regulären Ausdrücken über das Standardpaket regexp realisiert. In diesem Artikel erläutern wir die Grundlagen der Arbeit mit regexp in Go, betrachten die wichtigsten Funktionen und geben praktische Beispiele, die Ihnen helfen, reguläre Ausdrücke in Ihren Projekten zu verwenden.
Was sind reguläre Ausdrücke und warum werden sie in Go benötigt?
Ein regulärer Ausdruck ist eine Zeichenfolge, die ein Muster zur Suche in Text vorgibt. Beispielsweise können Sie prüfen, ob eine Zeichenfolge eine E-Mail, eine Telefonnummer oder ein bestimmtes Datenformat enthält. In Go bietet das Paket regexp Funktionen zum Kompilieren von Mustern, Suchen von Übereinstimmungen, Ersetzen von Text und Extrahieren von Teilzeichenfolgen.
Die wichtigsten Funktionen von regexp:
- Suche — Prüfung auf Vorhandensein einer dem Muster entsprechenden Teilzeichenfolge.
- Extraktion — Abrufen aller Übereinstimmungen oder einzelner Gruppen.
- Ersetzung — Ersetzen gefundener Textfragmente durch anderen Text.
- Validierung — Prüfung des Formats einer Zeichenfolge (E-Mail, Passwort, URL).
Installation und Import des Pakets regexp
Das Paket regexp
import ( "fmt" "regexp")1. Kompilierung eines regulären Ausdrucks: Compile und MustCompile
Der erste Schritt bei der Arbeit mit regulären Ausdrücken ist die Kompilierung des Musters. In Go gibt es zwei Hauptmethoden:
regexp.Compile(expr)— gibt einen kompilierten Ausdruck und einen Fehler zurück, wenn das Muster ungültig ist.regexp.MustCompile(expr)— ähnlich, löst aber bei einem Fehler eine Panik aus. Praktisch für statische Muster.
Beispiel:
package main
import ( "fmt" "regexp")
func main() { // Verwenden MustCompile, da das Muster bekanntermaßen korrekt ist re := regexp.MustCompile(`[a-z]+`) // Compile mit Fehlerbehandlung re2, err := regexp.Compile(`[0-9]+`) if err != nil { fmt.Println("Kompilierungsfehler:", err) return } fmt.Println(re, re2)}2. Grundlegende Methoden für Suche und Prüfung
Nach der Kompilierung haben wir ein Objekt *regexp.Regexp mit einer Reihe von Methoden. Betrachten wir die nützlichsten.
MatchString — Prüfung auf Übereinstimmung
Die Methode MatchString(s string) bool gibt true zurück, wenn die Zeichenfolge mindestens eine Übereinstimmung mit dem Muster enthält.
re := regexp.MustCompile(`go`)fmt.Println(re.MatchString("golang")) // truefmt.Println(re.MatchString("python")) // falseFindString — Suche nach der ersten Übereinstimmung
Gibt die erste Teilzeichenfolge zurück, die dem Muster entspricht.
re := regexp.MustCompile(`[0-9]+`)fmt.Println(re.FindString("Preis: 100 Rubel, Rabatt 20%")) // "100"FindAllString — Suche nach allen Übereinstimmungen
Gibt einen Slice aller gefundenen Zeichenfolgen zurück. Das zweite Argument ist die maximale Anzahl von Übereinstimmungen (-1 für alle).
re := regexp.MustCompile(`[0-9]+`)result := re.FindAllString("Preis: 100 Rubel, Rabatt 20%", -1)fmt.Println(result) // ["100", "20"]3. Extraktion von Gruppen mit Unterausdrücken
Runde Klammern im Muster erstellen Erfassungsgruppen (capturing groups). Die Methode FindStringSubmatch gibt einen Slice zurück, bei dem das erste Element die vollständige Übereinstimmung ist und die folgenden die Werte der Gruppen sind.
re := regexp.MustCompile(`(\\d{4})-(\\d{2})-(\\d{2})`)date := "Datum: 2023-12-25"matches := re.FindStringSu