Reguläre Ausdrücke verwenden

Clojure:
Reguläre Ausdrücke verwenden

Wie geht das:

Clojure, seiner Wurzeln in der Lisp-Familie treu bleibend, bietet einen reichen Satz an Funktionen, die nahtlos mit den Fähigkeiten von Java in Bezug auf reguläre Ausdrücke interagieren. Hier ist, wie Sie diese nutzen können:

Einfache Übereinstimmung

Um zu überprüfen, ob ein String einem Muster entspricht, verwenden Sie re-matches. Es gibt die gesamte Übereinstimmung zurück, wenn erfolgreich, oder nil andernfalls.

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

Nach Mustern suchen

Um das erste Vorkommen eines Musters zu finden, ist re-find Ihre Funktion der Wahl:

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

Erfassungsgruppen

Verwenden Sie re-find zusammen mit Klammern in Ihrem Muster, um Gruppen zu erfassen:

(let [[_ area code] (re-find #"(1)?(\d{3})" "Telefon: 123-4567")]
  (println "Vorwahl:" area "Code:" code))
;; Ausgabe: Vorwahl: nil Code: 123

Globale Suche (Alle Übereinstimmungen finden)

Clojure hat keine eingebaute globale Suche wie einige Sprachen. Verwenden Sie stattdessen re-seq, um eine faule Sequenz aller Übereinstimmungen zu erhalten:

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

Strings teilen

Um einen String basierend auf einem Muster zu teilen, verwenden Sie clojure.string/split:

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

Ersetzen

Ersetzen Sie Teile eines Strings, die einem Muster entsprechen, mit clojure.string/replace:

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

Drittanbieter-Bibliotheken

Obwohl Clojure’s eingebaute Unterstützung in den meisten Fällen ausreicht, sollten Sie für komplexere Szenarien Bibliotheken wie clojure.spec für robuste Datenvalidierung und reagent für reaktive DOM-Manipulation in Webanwendungen mit regex-basierter Routing- und Eingabevalidierung in Erwägung ziehen.

;; Beispiel mit clojure.spec für die Validierung einer E-Mail
(require '[clojure.spec.alpha :as s])
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/valid? ::email "[email protected]")  ;=> wahr

Denken Sie daran, obwohl reguläre Ausdrücke mächtig sind, können sie auch den Code schwer lesbar und wartbar machen. Verwenden Sie sie mit Bedacht und ziehen Sie immer einfachere String-Manipulationsfunktionen wo möglich in Betracht.