Clojure:
正規表現の使用

使い方:

Lispファミリーのルーツに忠実なClojureは、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:" area "Code:" code))
;; 出力: Area Code: nil Code: 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や、正規表現に基づくルーティングと入力検証を備えたウェブアプリケーションでのリアクティブDOM操作のためのreagentといったライブラリの使用を検討してください。

;; emailの検証にclojure.specを使用した例
(require '[clojure.spec.alpha :as s])
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/valid? ::email "[email protected]")  ;=> true

覚えておいてください、正規表現は強力ですが、コードを読みづらくし、保守が困難にすることもあります。それらを慎重に使用し、可能な場合はより単純な文字列操作関数を常に検討してください。