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

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



Reguläre Ausdrücke (Regex) sind ein leistungsstarkes Werkzeug zum Suchen, Extrahieren und Ersetzen von Text nach einem Muster. In Go (Golang) wird für die Arbeit mit ihnen das Standardpaket regexp verwendet, das eine effiziente und sichere API bereitstellt. In diesem Artikel werden wir die wichtigsten Funktionen des Pakets anhand konkreter Beispiele erläutern, die Ihnen helfen, das Wissen sofort in realen Projekten anzuwenden.



Grundlagen des regexp-Pakets in Go



Das Paket regexp implementiert eine Syntax für reguläre Ausdrücke, die mit RE2 kompatibel ist (mit Ausnahme von Rückwärtsreferenzen und Lookahead/Lookbehind). Dies macht es schnell und vorhersagbar. Die wichtigsten Funktionen:



  • regexp.Compile(pattern) — kompiliert ein Muster in ein Regexp-Objekt. Gibt einen Fehler zurück, wenn das Muster ungültig ist.
  • regexp.MustCompile(pattern) — dasselbe, löst aber bei einem Fehler eine Panik aus. Praktisch für statische Muster.
  • MatchString(pattern, s) — prüft, ob die Zeichenkette s eine Teilzeichenkette enthält, die dem Muster entspricht.


Verwenden Sie immer Compile für dynamische Muster (z. B. aus Benutzereingaben) und MustCompile für fest im Code definierte Muster.



package main

import ( "fmt" "regexp")

func main() { // MustCompile für ein statisches Muster verwenden re := regexp.MustCompile(`hello`) match := re.MatchString("hello world") fmt.Println(match) // true

// Compile für ein dynamisches Muster pattern := "[0-9]+" re2, err := regexp.Compile(pattern) if err != nil { fmt.Println("Kompilierungsfehler:", err) return } fmt.Println(re2.MatchString("abc123")) // true}


Suchen und Extrahieren von Daten



Oft muss man nicht nur eine Übereinstimmung prüfen, sondern bestimmte Teile einer Zeichenkette extrahieren. Dafür werden die Methoden FindString, FindStringSubmatch und FindAllString verwendet.



Extrahieren der ersten Übereinstimmung



package main

import ( "fmt" "regexp")

func main() { re := regexp.MustCompile(`\\d+`) text := "Code: 12345, Preis: 678" // Erste Übereinstimmung first := re.FindString(text) fmt.Println(first) // 12345 // Alle Übereinstimmungen all := re.FindAllString(text, -1) fmt.Println(all) // [12345 678]}


Extrahieren von Gruppen (Submatches)



Gruppen in einem Muster (gekennzeichnet durch runde Klammern) ermöglichen das Extrahieren von Teilen einer Übereinstimmung. Die Methode FindStringSubmatch gibt einen Slice zurück, bei dem das erste Element die vollständige Übereinstimmung und die folgenden Elemente die Werte der Gruppen sind.



package main

import ( "fmt" "regexp")

func main() { // Muster: Benutzername @Domain re := regexp.MustCompile(`(\\w+)@(\\w+\\.\\w+)`) email := "user@example.com" match := re.FindStringSubmatch(email) if len(match) > 0 { fmt.Println("Vollständige E-Mail:", match[0]) // user@example.com fmt.Println("Benutzername:", match[1]) // user fmt.Println("Domain:", match[2]) // example.com }}


Die Methode FindAllStringSubmatch macht dasselbe für alle Übereinstimmungen in einer Zeichenkette.



Textersetzung mit regulären Ausdrücken



Das Paket regexp bietet zwei Methoden zum Ersetzen: ReplaceAllString (einfache Ersetzung) und ReplaceAllStringFunc (Ersetzung mit einer Funktion).



Einfache Ersetzung



package main

import ( "fmt" "regexp")

func main() { re := regexp.MustCompile(`\\s+`) // ein oder mehrere Leerzeichen text := "Hallo Welt Go" result := re.ReplaceAllString(text, " ") fmt.Println(result) // Hallo Welt Go}


Ersetzung mit Gruppen



Im Ersetzungstext kann auf

Blogs

Buchempfehlungen