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

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

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

ابدأ الدورة

التعبيرات المنتظمة في Swift: من الأساسيات إلى الأمثلة المتقدمة



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



ستكون المقالة مفيدة لكل من المبتدئين الذين يتعرفون على Swift لأول مرة، والمطورين ذوي الخبرة الذين يرغبون في تعميق معرفتهم بالعمل مع النصوص في تطبيقات iOS/macOS.



1. أساسيات العمل مع NSRegularExpression



الكلاس NSRegularExpression هو الأداة الرئيسية للعمل مع التعبيرات المنتظمة في Swift. يوفر طرقاً للبحث والاستبدال واستخراج البيانات من السلاسل النصية.



1.1. إنشاء تعبير منتظم



لإنشاء كائن NSRegularExpression، يُستخدم المُهيئ الذي يأخذ سلسلة نصية تحتوي على النمط وخيارات اختيارية (NSRegularExpression.Options). البنية مغلفة داخل try لأنها قد ترمي خطأً في حالة بناء جملة غير صحيح للنمط.



import Foundation

let pattern = "\\\\d{3}-\\\\d{2}-\\\\d{4}" // مثال: 123-45-6789do { let regex = try NSRegularExpression(pattern: pattern, options: []) print("تم إنشاء التعبير المنتظم بنجاح")} catch { print("خطأ في بناء جملة التعبير المنتظم: \\(error.localizedDescription)")}


1.2. الخيارات الأساسية (NSRegularExpression.Options)



تتيح الخيارات تغيير سلوك التعبير المنتظم. فيما يلي الأكثر استخداماً:



  • .caseInsensitive — تجاهل حالة الأحرف (A = a).
  • .allowCommentsAndWhitespace — تجاهل المسافات والتعليقات في النمط.
  • .dotMatchesLineSeparators — النقطة (.) تطابق أيضاً أحرف فواصل الأسطر.
  • .anchorsMatchLines — الرمزان ^ و $ يطابقان بداية ونهاية كل سطر، وليس السلسلة بأكملها.


مثال مع الخيار .caseInsensitive:



let pattern = "hello"let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)let testString = "Hello, World!"let range = NSRange(location: 0, length: testString.utf16.count)if regex.firstMatch(in: testString, options: [], range: range) != nil {    print("تم العثور على تطابق") // سيطبع: تم العثور على تطابق}


2. البحث عن التطابقات والعمل مع النتائج



بعد إنشاء التعبير المنتظم، يمكن إجراء بحث عن التطابقات في السلسلة النصية. لهذا الغرض، تُستخدم الطريقتان firstMatch و matches.



2.1. البحث عن أول تطابق



الطريقة firstMatch(in:options:range:) تُرجع أول تطابق يتم العثور عليه ككائن NSTextCheckingResult (أو nil إذا لم يتم العثور على شيء).



let text = "رقمي: 123-45-6789، وأيضاً 987-65-4321"let pattern = "\\\\d{3}-\\\\d{2}-\\\\d{4}"let regex = try NSRegularExpression(pattern: pattern, options: [])let range = NSRange(location: 0, length: text.utf16.count)

if let match = regex.firstMatch(in: text, options: [], range: range) { let matchedString = (text as NSString).substring(with: match.range) print("أول تطابق: \\(matchedString)") // 123-45-6789}


2.2. البحث عن جميع التطابقات



الطريقة matches(in:options:range:) تُرجع مصفوفة تحتوي على جميع التطابقات. هذا مفيد عندما تحتاج إلى معالجة كل occurrence من النمط.



let text = "الرموز: ABC-123, DEF-456, GHI-789"let pattern = "[A-Z]{3}-\\\\d{3}"let regex = try NSRegularExpression(pattern: pattern, options: [])let range = NSRange(location: 0, length: text.utf16.count)let matches = regex.matches(in: tex                

المدونات

توصيات الكتب