Bruke regulære uttrykk

Clojure:
Bruke regulære uttrykk

Hvordan:

Clojure, som holder seg tro mot sine røtter i Lisp-familien, tilbyr et rikt sett med funksjoner som fungerer sømløst med Java sine regulære uttrykkskapasiteter. Her er hvordan du kan utnytte dem:

Grunnleggende Sammenligning

For å sjekke om en streng matcher et mønster, bruk re-matches. Den returnerer hele treffet hvis vellykket eller nil ellers.

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

Søke etter Mønstre

For å finne den første forekomsten av et mønster, er re-find din go-to funksjon:

(re-find #"\d+" "Ordre 123")  ;=> "123"

Fangende Grupper

Bruk re-find sammen med parenteser i mønsteret ditt for å fange grupper:

(let [[_ område kode] (re-find #"(1)?(\d{3})" "Telefon: 123-4567")]
  (println "Områdekode:" område "Kode:" kode))
;; Utdata: Områdekode: nil Kode: 123

Global Søk (Finn Alle Treff)

Clojure har ikke en innebygd global søkefunksjon som noen språk. Bruk isteden re-seq for å få en lat sekvens av alle treff:

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

Splitting av Strenger

For å splitte en streng basert på et mønster, bruk clojure.string/split:

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

Erstatning

Erstatt deler av en streng som matcher et mønster med clojure.string/replace:

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

Biblioteker fra tredjeparter

Selv om Clojure sin innebygde støtte er tilstrekkelig for de fleste tilfeller, for mer komplekse scenarioer, vurder å bruke biblioteker som clojure.spec for robust datavalidering og reagent for reaktiv DOM-manipulering i webapplikasjoner med regex-basert ruting og inndata-validering.

;; Eksempel som bruker clojure.spec for å validere en e-post
(require '[clojure.spec.alpha :as s])
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/valid? ::email "[email protected]")  ;=> sant

Husk, mens regulære uttrykk er kraftfulle, kan de også gjøre kode vanskelig å lese og vedlikeholde. Bruk dem med omhu og vurder alltid enklere strengmanipuleringsfunksjoner hvor mulig.