التعبيرات النمطية في Kotlin: دليل كامل للمبتدئين
\n\nالتعبيرات النمطية (regex) هي أداة قوية للبحث عن السلاسل النصية واستبدالها والتحقق منها وفقًا لنمط معين. في Kotlin، يتم التعامل مع التعبيرات النمطية من خلال الفئة Regex، التي توفر طرقًا ملائمة لمعالجة النصوص. في هذه المقالة، سنشرح أساسيات التعبيرات النمطية في Kotlin مع أمثلة توضيحية تساعدك على إتقان هذه الأداة بسرعة.
ما هي التعبيرات النمطية؟
\n\nالتعبير النمطي هو سلسلة من الأحرف تحدد نمطًا للبحث في النص. على سبيل المثال، النمط \\\\d{3} يبحث عن ثلاثة أرقام متتالية، بينما [A-Z]+ يبحث عن حرف كبير واحد أو أكثر.
في Kotlin، يتم استخدام الفئة Regex للتعامل مع التعبيرات النمطية، ويمكن إنشاؤها بطريقتين:
// الطريقة الأولى: عبر المُنشئ\nval regex1 = Regex("\\\\d+")\n\n// الطريقة الثانية: عبر الامتداد toRegex()\nval regex2 = "\\\\d+".toRegex()\n\n\nالطرق الأساسية لـ Regex في Kotlin
\n\nتوفر الفئة Regex عدة طرق رئيسية للتعامل مع السلاسل النصية:
- \n
matches()— تتحقق مما إذا كانت السلسلة بأكملها تطابق النمط \ncontainsMatchIn()— تتحقق مما إذا كانت السلسلة تحتوي على تطابق واحد على الأقل \nfind()— تجد أول تطابق \nfindAll()— تجد جميع التطابقات \nreplace()— تستبدل التطابقات بسلسلة محددة \nsplit()— تقسم السلسلة وفقًا للنمط \n
مثال 1: التحقق من عنوان البريد الإلكتروني
\n\nلنبدأ بمثال عملي — التحقق من صحة عنوان البريد الإلكتروني:
\n\nfun isValidEmail(email: String): Boolean {\n val emailRegex = Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}$")\n return emailRegex.matches(email)\n}\n\nfun main() {\n val emails = listOf(\n "user@example.com",\n "invalid-email",\n "test@domain.co.uk",\n "@gmail.com"\n )\n \n emails.forEach { email ->\n println("$email: ${if (isValidEmail(email)) "صحيح" else "غير صحيح"}")\n }\n}\n\n\nنتيجة التنفيذ:
\nuser@example.com: صحيح\ninvalid-email: غير صحيح\ntest@domain.co.uk: صحيح\n@gmail.com: غير صحيح\n\nمثال 2: استخراج أرقام الهواتف
\n\nلنفترض أن لدينا نصًا يحتوي على أرقام هواتف مختلفة، ونريد استخراج جميع الأرقام بتنسيق +7 (XXX) XXX-XX-XX:
\n\nfun extractPhoneNumbers(text: String): List {\n val phoneRegex = Regex("""\\+7 \\(\\d{3}\\) \\d{3}-\\d{2}-\\d{2}""")\n return phoneRegex.findAll(text).map { it.value }.toList()\n}\n\nfun main() {\n val text = """\n جهات الاتصال:\n المدير: +7 (495) 123-45-67\n الدعم: +7 (812) 987-65-43\n إضافي: 8-800-555-35-35\n """.trimIndent()\n \n val phones = extractPhoneNumbers(text)\n println("الأرقام التي تم العثور عليها:")\n phones.forEach { println(it) }\n}\n \n\nالنتيجة:
\nالأرقام التي تم العثور عليها:\n+7 (495) 123-45-67\n+7 (812) 987-65-43\n\nلاحظ: الرقم 8-800-555-35-35 لم يتم العثور عليه لأنه لا يتطابق مع نمطنا.
\n\nمثال 3: الاستبدال وتنظيف النص
\n\nالتعبيرات النمطية مناسبة تمامًا لاستبدال أجزاء من النص. على سبيل المثال، سنقوم بإزالة جميع وسوم HTML من سلسلة نصية:
\n\nfun removeHtmlTags(html: String): String {\n val tagRegex = Regex("<[^>]*>")\n return tagRegex.replace(html, "")\n}\n\nfun main() {\n val htmlText = """\n <h1>عنوان</h1>\n <p>هذا نص <b>مهم</b>.</p>\n <a href="link.html">رابط</a>\n """.trimIndent()\n \n val cleanText = removeHtmlTags(htmlText)\n println("النص المنظف:")\n println(cleanText)\n}\n\n\nالنتيجة:
\nالمدونات
توصيات الكتب
اقرأ أيضًا