التعبيرات المنتظمة في Swift مع أمثلة: للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التعبيرات المنتظمة في Swift: دليل شامل للمبتدئين

\n

التعبيرات المنتظمة (regex) هي أداة قوية للبحث عن البيانات النصية واستبدالها والتحقق من صحتها. في Swift، يتم العمل مع التعبيرات المنتظمة من خلال الفئة NSRegularExpression من إطار العمل Foundation. في هذه المقالة، ستتعلم كيفية إنشاء وتطبيق التعبيرات المنتظمة في تطبيقات iOS و macOS، وستحلل أمثلة حقيقية وتتقن أساسيات بناء الجملة.

\n\n

1. أساسيات بناء جملة التعبيرات المنتظمة

\n

قبل كتابة كود Swift، من المهم فهم الرموز والتراكيب الأساسية للتعبيرات المنتظمة. إليك العناصر الأساسية:

\n
    \n
  • . — أي حرف (باستثناء سطر جديد)
  • \n
  • * — 0 أو أكثر من التكرارات للحرف السابق
  • \n
  • + — 1 أو أكثر من التكرارات
  • \n
  • ? — 0 أو 1 تكرار (يجعل الحرف السابق اختيارياً)
  • \n
  • \\d — أي رقم (0-9)
  • \n
  • \\w — أي حرف أو رقم أو شرطة سفلية
  • \n
  • [abc] — أحد الأحرف a أو b أو c
  • \n
  • [^abc] — أي حرف باستثناء a أو b أو c
  • \n
  • ^ — بداية السلسلة
  • \n
  • $ — نهاية السلسلة
  • \n
\n

يتم دمج هذه الرموز لإنشاء أنماط. على سبيل المثال، النمط ^[A-Za-z]+$ يعني: السلسلة تتكون فقط من أحرف الأبجدية اللاتينية من البداية إلى النهاية.

\n\n

2. إنشاء واستخدام NSRegularExpression في Swift

\n

في Swift، يبدأ العمل مع التعبيرات المنتظمة باستيراد Foundation وإنشاء مثيل من NSRegularExpression. لننظر إلى مثال بسيط: البحث عن جميع الأرقام في سلسلة.

\n
import Foundation\n\nlet text = "رقمي: 123-456-7890"\nlet pattern = "\\\\d+" // النمط: رقم واحد أو أكثر\n\ndo {\n    let regex = try NSRegularExpression(pattern: pattern)\n    let results = regex.matches(in: text, range: NSRange(text.startIndex..., in: text))\n    \n    for match in results {\n        if let range = Range(match.range, in: text) {\n            print("تم العثور على: \\(text[range])")\n        }\n    }\n} catch {\n    print("خطأ في التعبير المنتظم: \\(error.localizedDescription)")\n}\n// الإخراج:\n// تم العثور على: 123\n// تم العثور على: 456\n// تم العثور على: 7890
\n

لاحظ الهروب من الشرطة المائلة العكسية: في سلسلة Swift "\\\\d" تقابل التعبير المنتظم \\d. الفئة NSRegularExpression تطرح استثناءً عند وجود نمط غير صحيح، لذلك نستخدم try-catch.

\n\n

2.1. العمل مع NSRange

\n

الطريقة matches(in:range:) تُرجع مصفوفة من كائنات NSTextCheckingResult. كل نتيجة تحتوي على نطاق (NSRange) للتطابق الذي تم العثور عليه. للتحويل إلى Swift Range، استخدم المُهيئ Range(match.range, in: text).

\n\n

3. أمثلة عملية للتعبيرات المنتظمة

\n

لننظر إلى ثلاث مهام نموذجية: التحقق من البريد الإلكتروني، استخراج عناوين URL، واستبدال النص.

\n\n

3.1. التحقق من صحة عنوان البريد الإلكتروني

\n

لنتحقق مما إذا كانت السلسلة تطابق نمط بريد إلكتروني بسيط (نسخة مبسطة):

\n
func isValidEmail(_ email: String) -> Bool {\n    let pattern = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}$"\n    let regex = try? NSRegularExpression(pattern: pattern)\n    let range = NSRange(location: 0, length: email.utf16.count)\n    return regex?.firstMatch(in: email, range: range) != nil\n}\n\nprint(isValidEmail("test@example.com"))   // true\nprint(isValidEmail("invalid-email"))      // false
\n

هنا نستخدم firstMatch الذي يُرجع أول تطابق. إذا لم يكن هناك تطابقات، يُرجع nil.

\n\n

3.2. استخراج عناوين URL من النص

\n

لنفترض أن لدينا سلسلة تحتوي على عدة روابط. لنستخرج جميع عناوين URL:

\n
let text = "قم بزيارة الموقع https://pythonlib.ru أو اكتب إلى support@pythonlib.ru"\nlet pattern = "https?://[\\\\w./%-]+"\n\ndo                

المدونات

توصيات الكتب