Reguläre Ausdrücke verwenden

Go:
Reguläre Ausdrücke verwenden

Wie geht das:

In Go stellt das regexp-Paket die Funktionalität für reguläre Ausdrücke bereit. Hier ist eine Schritt-für-Schritt-Anleitung, wie man es benutzt:

  1. Kompilieren eines regulären Ausdrucks

Kompilieren Sie zuerst Ihren Regex-Muster mit regexp.Compile. Es ist eine gute Praxis, Fehler zu behandeln, die während der Kompilierung auftreten könnten.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    pattern := "go+"
    r, err := regexp.Compile(pattern)
    if err != nil {
        fmt.Println("Fehler beim Kompilieren des Regex:", err)
        return
    }
    
    fmt.Println("Regex erfolgreich kompiliert")
}
  1. Überprüfen von Zeichenketten

Überprüfen Sie, ob eine Zeichenkette mit dem Muster übereinstimmt, indem Sie die Methode MatchString verwenden.

matched := r.MatchString("goooooogle")
fmt.Println("Übereinstimmung:", matched) // Ausgabe: Übereinstimmung: true
  1. Finden von Übereinstimmungen

Um die erste Übereinstimmung in einer Zeichenkette zu finden, verwenden Sie die Methode FindString.

match := r.FindString("golang gooooo")
fmt.Println("Gefunden:", match) // Ausgabe: Gefunden: gooooo
  1. Finden aller Übereinstimmungen

Für alle Übereinstimmungen nimmt FindAllString eine Eingabezeichenkette und eine Ganzzahl n entgegen. Wenn n >= 0, gibt es höchstens n Übereinstimmungen zurück; wenn n < 0, gibt es alle Übereinstimmungen zurück.

matches := r.FindAllString("go gooo gooooo", -1)
fmt.Println("Alle Übereinstimmungen:", matches) // Ausgabe: Alle Übereinstimmungen: [go gooo gooooo]
  1. Ersetzen von Übereinstimmungen

Um Übereinstimmungen durch eine andere Zeichenkette zu ersetzen, ist ReplaceAllString praktisch.

result := r.ReplaceAllString("go gooo gooooo", "Java")
fmt.Println("Ersetzt:", result) // Ausgabe: Ersetzt: Java Java Java

Tiefere Einblicke

Eingeführt in der Standardbibliothek von Go, implementiert das regexp-Paket die Suche nach regulären Ausdrücken und die Musterübereinstimmung, inspiriert von der Syntax von Perl. Unter der Haube kompiliert Go’s Regex-Engine die Muster in eine Form von Bytecodes, die dann von einer in Go selbst geschriebenen Matching-Engine ausgeführt werden. Diese Implementierung tauscht etwas von der Geschwindigkeit, die in der direkten Hardwareausführung gefunden wird, gegen Sicherheit und Benutzerfreundlichkeit ein und vermeidet die Fallstricke von Pufferüberläufen, die in C-basierten Bibliotheken häufig sind.

Trotz seiner Leistungsfähigkeit ist Regex in Go nicht immer die optimale Lösung für Musterübereinstimmungen, insbesondere wenn es um hochstrukturierte Daten wie JSON oder XML geht. In diesen Fällen bieten spezialisierte Parser oder Bibliotheken, die für diese Datenformate konzipiert sind, eine bessere Leistung und Zuverlässigkeit. Dennoch bleibt Regex für Aufgaben, die komplizierte Textverarbeitung ohne vordefinierte Struktur beinhalten, ein wesentliches Werkzeug im Toolkit eines Programmierers und bietet eine Balance aus Leistungsfähigkeit und Flexibilität, die wenige Alternativen erreichen können.