Clojure:
Usando expressões regulares

Como:

Clojure, fiel às suas raízes na família Lisp, oferece um rico conjunto de funções que se integram perfeitamente com as capacidades de expressão regular do Java. Veja como você pode aproveitá-las:

Correspondência Básica

Para verificar se uma string corresponde a um padrão, use re-matches. Ele retorna a correspondência completa se for bem-sucedido ou nil caso contrário.

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

Pesquisando por Padrões

Para encontrar a primeira ocorrência de um padrão, re-find é sua função de escolha:

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

Capturando Grupos

Use re-find junto com parênteses em seu padrão para capturar grupos:

(let [[_ área código] (re-find #"(1)?(\d{3})" "Telefone: 123-4567")]
  (println "Código de Área:" área "Código:" código))
;; Saída: Código de Área: nil Código: 123

Pesquisa Global (Encontrar Todas as Correspondências)

Clojure não tem uma pesquisa global embutida como algumas linguagens. Em vez disso, use re-seq para obter uma sequência preguiçosa de todas as correspondências:

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

Dividindo Strings

Para dividir uma string com base em um padrão, use clojure.string/split:

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

Substituição

Substitua partes de uma string que correspondem a um padrão com clojure.string/replace:

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

Bibliotecas de Terceiros

Embora o suporte interno de Clojure seja suficiente na maioria dos casos, para cenários mais complexos, considere usar bibliotecas como clojure.spec para validação robusta de dados e reagent para manipulação reativa do DOM em aplicações web com roteamento baseado em regex e validação de entrada.

;; Exemplo usando clojure.spec para validar um email
(require '[clojure.spec.alpha :as s])
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/valid? ::email "[email protected]")  ;=> true

Lembre-se, embora as expressões regulares sejam poderosas, elas também podem tornar o código difícil de ler e manter. Use-as com parcimônia e sempre considere funções de manipulação de string mais simples quando possível.