Korzystanie z wyrażeń regularnych

Go:
Korzystanie z wyrażeń regularnych

Jak to zrobić:

W Go pakiet regexp zapewnia funkcjonalność wyrażeń regularnych. Oto krok po kroku, jak go używać:

  1. Kompilowanie wyrażenia regularnego

Najpierw skompiluj swój wzór regex używając regexp.Compile. Dobra praktyka polega na obsłudze błędów, które mogą pojawić się podczas kompilacji.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    pattern := "go+"
    r, err := regexp.Compile(pattern)
    if err != nil {
        fmt.Println("Błąd kompilacji regex:", err)
        return
    }
    
    fmt.Println("Regex skompilowany pomyślnie")
}
  1. Dopasowywanie ciągów

Sprawdź, czy ciąg pasuje do wzorca za pomocą metody MatchString.

matched := r.MatchString("goooooogle")
fmt.Println("Dopasowane:", matched) // Wynik: Dopasowane: true
  1. Znajdowanie pasujących

Aby znaleźć pierwsze pasujące w ciągu, użyj metody FindString.

match := r.FindString("golang gooooo")
fmt.Println("Znaleziono:", match) // Wynik: Znaleziono: gooooo
  1. Znajdowanie wszystkich pasujących

Do wszystkich pasujących, FindAllString bierze ciąg wejściowy i liczbę całkowitą n. Jeśli n >= 0, zwraca co najwyżej n pasujących; jeśli n < 0, zwraca wszystkie pasujące.

matches := r.FindAllString("go gooo gooooo", -1)
fmt.Println("Wszystkie pasujące:", matches) // Wynik: Wszystkie pasujące: [go gooo gooooo]
  1. Zastępowanie pasujących

Do zastępowania pasujących innym ciągiem, przydaje się ReplaceAllString.

result := r.ReplaceAllString("go gooo gooooo", "Java")
fmt.Println("Zastąpione:", result) // Wynik: Zastąpione: Java Java Java

Dogłębna analiza

Wprowadzony do standardowej biblioteki Go, pakiet regexp implementuje wyszukiwanie wyrażeń regularnych i dopasowywanie wzorców inspirowane składnią Perla. Pod spodem, silnik regex Go kompiluje wzorce do formy bajtkodów, które są następnie wykonane przez silnik dopasowujący napisany w Go. Ta implementacja wymienia część szybkości znalezioną w bezpośrednim wykonaniu sprzętowym na bezpieczeństwo i łatwość użycia, unikając pułapek przepełnień bufora, które są powszechne w bibliotekach opartych na C.

Pomimo swojej mocy, regex w Go nie zawsze jest optymalnym rozwiązaniem dla dopasowywania wzorców, szczególnie przy pracy z silnie ustrukturyzowanymi danymi, takimi jak JSON lub XML. W tych przypadkach, specjalizowane parsery lub biblioteki zaprojektowane dla tych formatów danych oferują lepszą wydajność i niezawodność. Jednakże, do zadań wymagających skomplikowanego przetwarzania tekstu bez z góry określonej struktury, regex pozostaje niezbędnym narzędziem w zestawie programisty, oferując równowagę mocy i elastyczności, której mało które alternatywne rozwiązanie może dorównać.