שימוש בביטויים רגולריים

Swift:
שימוש בביטויים רגולריים

איך לעשות:

התמיכה הטבעית של Swift ב regex משתמשת במחלקה NSRegularExpression, לצד המתודות range ו-replacement של מחלקת ה-String. להלן דוגמה לשימוש ב-regex כדי למצוא ולהדגיש כתובות דוא"ל בתוך בלוק טקסט:

import Foundation

let text = "צור קשר בכתובת [email protected] או [email protected] למידע נוסף."
let regexPattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"

do {
    let regex = try NSRegularExpression(pattern: regexPattern)
    let matches = regex.matches(in: text, range: NSRange(text.startIndex..., in: text))

    if !matches.isEmpty {
        for match in matches {
            let range = Range(match.range, in: text)!
            print("נמצא: \(text[range])")
        }
    } else {
        print("לא נמצאו התאמות.")
    }
} catch {
    print("שגיאת regex: \(error.localizedDescription)")
}

// פלט לדוגמה:
// נמצא: [email protected]
// נמצא: [email protected]

לסיטואציות מורכבות יותר או ממוקדות בנוחות, ניתן להשתמש בספריות צד שלישי כמו SwiftRegex, אשר מפשטות את התחביר ומרחיבות את האפשרויות. אף על פי שספריית הסטנדרט של Swift חזקה, כמה מפתחים מעדיפים את ספריות אלו בשל תחבירם התמציתי והתכונות הנוספות שהם מציעות. הנה איך תוכלו לבצע משימה דומה באמצעות ספרייה היפותטית של צד שלישי:

// בהנחה שקיימת ספרייה בשם SwiftRegex והיא מיובאת
let text = "פנה אלינו ב [email protected] או בקר באתר שלנו."
let emailPattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"

let emails = text.matches(for: emailPattern) // שיטה היפותטית המסופקת על ידי SwiftRegex
if emails.isEmpty {
    print("לא נמצאו כתובות דוא\"ל.")
} else {
    emails.forEach { email in
        print("נמצא: \(email)")
    }
}

// פלט היפותטי בהנחה שהשיטה `matches(for:)` קיימת ב-SwiftRegex:
// נמצא: [email protected]

דוגמה זו ממחישה את השימוש בחבילה של ביטויים רגולריים של צד שלישי כדי לפשט את מציאת התאמות בתוך מחרוזת, בהנחה שקיימות שיטות נוחות כמו matches(for:). חשוב להתייחס לתיעוד של הספרייה הספציפית של צד שלישי לקבלת תחביר מדויק וזמינות שיטה.