Korzystanie z wyrażeń regularnych

Clojure:
Korzystanie z wyrażeń regularnych

Jak to zrobić:

Clojure, pozostając wiernym swoim korzeniom z rodziny Lisp, oferuje bogaty zestaw funkcji, które bezproblemowo współpracują z możliwościami wyrażeń regularnych Javy. Oto jak możesz z nich korzystać:

Podstawowe dopasowywanie

Aby sprawdzić, czy ciąg znaków pasuje do wzorca, użyj re-matches. Zwraca całe dopasowanie w przypadku sukcesu lub nil w przeciwnym razie.

(re-matches #"\d+" "123")  ;=> "123"
(re-matches #"\d+" "abc")  ;=> nil

Wyszukiwanie wzorców

Aby znaleźć pierwsze wystąpienie wzorca, re-find jest funkcją, do której powinieneś się zwrócić:

(re-find #"\d+" "Zamówienie 123")  ;=> "123"

Grupy przechwytujące

Użyj re-find wraz z nawiasami w swoim wzorcu, aby przechwycić grupy:

(let [[_ area code] (re-find #"(1)?(\d{3})" "Telefon: 123-4567")]
  (println "Kod obszaru:" area "Kod:" code))
;; Wyjście: Kod obszaru: nil Kod: 123

Wyszukiwanie globalne (Znajdź wszystkie dopasowania)

Clojure nie ma wbudowanego globalnego wyszukiwania, jak niektóre języki. Zamiast tego użyj re-seq aby otrzymać leniwą sekwencję wszystkich dopasowań:

(re-seq #"\d+" "id: 123, ilość: 456")  ;=> ("123" "456")

Dzielenie ciągów znaków

Aby podzielić ciąg znaków na podstawie wzorca, użyj clojure.string/split:

(clojure.string/split "Jan,Kowalski,30" #",")  ;=> ["Jan" "Kowalski" "30"]

Zamiana

Zamień części ciągu znaków pasujące do wzorca za pomocą clojure.string/replace:

(clojure.string/replace "2023-04-01" #"\d{4}" "RRRR")  ;=> "RRRR-04-01"

Biblioteki firm trzecich

Chociaż wbudowane wsparcie Clojure wystarcza w większości przypadków, dla bardziej złożonych scenariuszy, rozważ użycie bibliotek takich jak clojure.spec dla solidnej walidacji danych i reagent do reaktywnej manipulacji DOM w aplikacjach internetowych z wykorzystaniem wyrażeń regularnych do routingu i walidacji danych wejściowych.

;; Przykład użycia clojure.spec do walidacji adresu email
(require '[clojure.spec.alpha :as s])
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/valid? ::email "[email protected]")  ;=> true

Pamiętaj, że choć wyrażenia regularne są potężne, mogą również sprawić, że kod będzie trudny do odczytania i utrzymania. Używaj ich z rozwagą i zawsze rozważ prostsze funkcje manipulacji ciągami znaków, jeśli jest to możliwe.