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:" 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
לאימות נתונים תקף ו-reagent
לניהול DOM ריאקטיבי ביישומי אינטרנט עם ניתוב ואימות קלט מבוססי ביטויים רגולריים.
;; דוגמה של שימוש ב-clojure.spec לאימות דואר אלקטרוני
(require '[clojure.spec.alpha :as s])
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/valid? ::email "[email protected]") ;=> נכון
זכרו, למרות שביטויים רגולריים הם כלי עוצמתי, הם גם יכולים להפוך קוד לקשה לקריאה ולתחזוקה. השתמשו בהם בשיקול דעת ותמיד שקלו פונקציות פשוטות יותר של ניהול מחרוזות ככל הניתן.