Clojure:
การใช้เรกุลาร์เอ็กเพรสชัน
วิธีการ:
Clojure, ยึดมั่นในรากฐานของมันในครอบครัวของ Lisp, มีชุดฟังก์ชันที่หลากหลายซึ่งทำงานร่วมกับความสามารถของ Java ในเรื่อง Regular expression ได้อย่างไม่มีที่ติ นี่คือวิธีที่คุณสามารถใช้มันได้:
การจับคู่พื้นฐาน
เพื่อตรวจสอบว่าสตริงตรงกับรูปแบบหรือไม่ ใช้ 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))
;; Output: 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
สำหรับการตรวจสอบความถูกต้องของข้อมูลอย่างเข้มงวด และ reagent
สำหรับการจัดการ DOM แบบรีแอคทีฟในเว็บแอปพลิเคชันโดยใช้การกำหนดเส้นทางและการตรวจสอบความถูกต้องของข้อมูลที่ป้อนตามรูปแบบ regex
;; ตัวอย่างการใช้ clojure.spec สำหรับการตรวจสอบอีเมล
(require '[clojure.spec.alpha :as s])
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/valid? ::email "[email protected]") ;=> true
จำไว้ว่า ในขณะที่นิพจน์ปกติมีความสามารถอย่างมาก พวกมันก็สามารถทำให้โค้ดยากต่อการอ่านและดูแลรักษาได้ ใช้พวกมันอย่างรอบคอบและพิจารณาฟังก์ชันการจัดการสตริงที่ง่ายกว่าเมื่อเป็นไปได้