การใช้เรกุลาร์เอ็กเพรสชัน

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

จำไว้ว่า ในขณะที่นิพจน์ปกติมีความสามารถอย่างมาก พวกมันก็สามารถทำให้โค้ดยากต่อการอ่านและดูแลรักษาได้ ใช้พวกมันอย่างรอบคอบและพิจารณาฟังก์ชันการจัดการสตริงที่ง่ายกว่าเมื่อเป็นไปได้