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