Використання регулярних виразів

Clojure:
Використання регулярних виразів

Як:

Clojure, залишаючись вірним своїм корінням у сімействі Lisp, пропонує багатий набір функцій, що безперебійно інтегруються з можливостями регулярних виразів Java. Ось як ви можете їх використовувати:

Базове співставлення

Щоб перевірити, чи рядок відповідає шаблону, використовуйте re-matches. Вона повертає повний збіг у разі успіху або nil в іншому випадку.

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

Пошук за шаблонами

Щоб знайти перше входження шаблону, вашим інструментом буде re-find:

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

Захоплення груп

Використовуйте re-find разом з дужками у вашому шаблоні, щоб захопити групи:

(let [[_ area code] (re-find #"(1)?(\d{3})" "Phone: 123-4567")]
  (println "Код регіону:" area "Код:" code))
;; Вивід: Код регіону: nil Код: 123

Глобальний пошук (Знайти всі збіги)

Clojure не має вбудованого глобального пошуку, як деякі мови. Натомість, використовуйте re-seq для отримання лінивої послідовності всіх збігів:

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

Розбиття рядків

Щоб розділити рядок за допомогою шаблону, використовуйте clojure.string/split:

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

Заміна

Замінюйте частини рядка, що відповідають шаблону, за допомогою clojure.string/replace:

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

Сторонні бібліотеки

Хоча вбудована підтримка Clojure достатня для більшості випадків, для більш складних сценаріїв розгляньте використання бібліотек, таких як clojure.spec для надійної валідації даних та reagent для реактивної маніпуляції DOM у веб-додатках з маршрутизацією та валідацією вводу на основі регулярних виразів.

;; Приклад використання clojure.spec для валідації електронної пошти
(require '[clojure.spec.alpha :as s])
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/valid? ::email "[email protected]")  ;=> true

Пам’ятайте, хоча регулярні вирази є потужними, вони також можуть зробити код важким для читання та підтримки. Використовуйте їх помірковано та завжди розглядайте спрощені функції маніпуляції рядками, де це можливо.