Clojure:
Utilisation des expressions régulières
Comment faire :
Clojure, restant fidèle à ses racines dans la famille Lisp, offre un riche ensemble de fonctions qui s’interface de manière transparente avec les capacités des expressions régulières de Java. Voici comment vous pouvez les utiliser :
Correspondance de Base
Pour vérifier si une chaîne correspond à un motif, utilisez re-matches
. Il renvoie la correspondance complète si réussi ou nil
sinon.
(re-matches #"\d+" "123") ;=> "123"
(re-matches #"\d+" "abc") ;=> nil
Recherche de Motifs
Pour trouver la première occurrence d’un motif, re-find
est votre fonction de prédilection :
(re-find #"\d+" "Commande 123") ;=> "123"
Groupes de Capture
Utilisez re-find
avec des parenthèses dans votre motif pour capturer des groupes :
(let [[_ zone code] (re-find #"(1)?(\d{3})" "Téléphone : 123-4567")]
(println "Code Régional:" zone "Code:" code))
;; Sortie : Code Régional: nil Code: 123
Recherche Globale (Trouver Tous les Correspondances)
Clojure n’a pas de recherche globale intégrée comme certains langages. À la place, utilisez re-seq
pour obtenir une séquence paresseuse de toutes les correspondances :
(re-seq #"\d+" "id : 123, qté : 456") ;=> ("123" "456")
Fractionnement de Chaînes
Pour fractionner une chaîne basée sur un motif, utilisez clojure.string/split
:
(clojure.string/split "John,Doe,30" #",") ;=> ["John" "Doe" "30"]
Remplacement
Remplacez des parties d’une chaîne correspondant à un motif avec clojure.string/replace
:
(clojure.string/replace "2023-04-01" #"\d{4}" "AAAA") ;=> "AAAA-04-01"
Bibliothèques tierces
Bien que le support intégré de Clojure suffise dans la plupart des cas, pour des scénarios plus complexes, envisagez d’utiliser des bibliothèques telles que clojure.spec
pour une validation de données robuste et reagent
pour la manipulation réactive du DOM dans des applications web avec routage basé sur des regex et validation d’entrée.
;; Exemple d'utilisation de clojure.spec pour valider un email
(require '[clojure.spec.alpha :as s])
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/valide? ::email "[email protected]") ;=> vrai
Rappelez-vous, bien que les expressions régulières soient puissantes, elles peuvent aussi rendre le code difficile à lire et à maintenir. Utilisez-les judicieusement et envisagez toujours des fonctions de manipulation de chaînes plus simples lorsque c’est possible.