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

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

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

ابدأ الدورة

مقدمة في التعبيرات المنتظمة في Swift

\n\n

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

\n\n

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

\n\n

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

\n\n

الفئة NSRegularExpression هي الطريقة الأساسية للعمل مع التعبيرات المنتظمة في Swift. دعنا نستعرض العمليات الأساسية.

\n\n

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

\n\n
import Foundation\n\nlet pattern = "[A-Za-z]+@[A-Za-z]+\\\\.[A-Za-z]+"\nguard let regex = try? NSRegularExpression(pattern: pattern) else {\n    fatalError("نمط غير صحيح")\n}
\n\n

لاحظ الشرطة المائلة المزدوجة \\\\ - في Swift، تتطلب السلاسل النصية هروب الشرطة المائلة العكسية.

\n\n

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

\n\n
let text = "اتصل بنا عبر البريد الإلكتروني: support@example.com"\nlet nsString = text as NSString\nlet range = NSRange(location: 0, length: nsString.length)\n\nif let match = regex.firstMatch(in: text, range: range) {\n    let email = nsString.substring(with: match.range)\n    print("تم العثور على بريد إلكتروني: \\(email)") // support@example.com\n}
\n\n

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

\n\n
let text = "جهات الاتصال: info@site.com, admin@site.com, support@site.com"\nlet matches = regex.matches(in: text, range: NSRange(location: 0, length: text.count))\n\nfor match in matches {\n    let range = match.range\n    let email = (text as NSString).substring(with: range)\n    print(email)\n}\n// الإخراج:\n// info@site.com\n// admin@site.com\n// support@site.com
\n\n

استخدام مجموعات الالتقاط

\n\n

تسمح مجموعات الالتقاط باستخراج أجزاء من التطابق. في Swift، يتم تمييز المجموعات بأقواس دائرية ().

\n\n

استخراج البيانات باستخدام المجموعات

\n\n
let pattern = "(\\\\d{4})-(\\\\d{2})-(\\\\d{2})"\nlet dateString = "اليوم: 2024-03-15"\n\nguard let regex = try? NSRegularExpression(pattern: pattern) else { return }\nlet nsString = dateString as NSString\n\nif let match = regex.firstMatch(in: dateString, range: NSRange(location: 0, length: nsString.length)) {\n    let fullDate = nsString.substring(with: match.range) // 2024-03-15\n    let year = nsString.substring(with: match.range(at: 1)) // 2024\n    let month = nsString.substring(with: match.range(at: 2)) // 03\n    let day = nsString.substring(with: match.range(at: 3)) // 15\n    \n    print("السنة: \\(year)، الشهر: \\(month)، اليوم: \\(day)")\n}
\n\n

المجموعات المسماة (العمل مع Range)

\n\n

بدءًا من Swift 5.7، يمكن استخدام بناء جملة أكثر ملاءمة مع Range:

\n\n
let text = "السعر: 1500 روبل"\nlet pattern = #"(\\d+)\\sروبل"#\n\nif let range = text.range(of: pattern, options: .regularExpression) {\n    let match = text[range]\n    print("تم العثور على: \\(match)") // 1500 روبل\n}
\n\n

استبدال النص باستخدام التعبيرات المنتظمة

\n\n

إحدى أكثر الإمكانيات فائدة هي استبدال أجزاء من النص وفقًا لنمط معين.

\n\n

استبدال بسيط

\n\n
let text = "اتصل على الرقم +7 (123) 456-78-90"\nlet pattern = "\\\\+7\\\\s\\\\(\\\\d{3}\\\\)\\\\s\\\\d{3}-\\\\d{2}-\\\\d{2}"\nlet replacement = "[رقم مخفي]"\n\nguard let regex = try? NSRegularExpression(pattern: pattern) else { return }\nlet modifiedText = regex.stringByReplacingMatches(\n    in: text,\n    range: NSRange(location: 0, length: text.count),\n    withTemplate: replacement\n)\n\nprint(modifiedText) // اتصل على الرقم [رقم مخفي]
\n\n

استبدال

المدونات

توصيات الكتب