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

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

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

ابدأ الدورة

التعبيرات النمطية في Kotlin: دليل كامل للمبتدئين

\n\n

التعبيرات النمطية (regex) هي أداة قوية للبحث عن السلاسل النصية واستبدالها والتحقق منها وفقًا لنمط معين. في Kotlin، يتم التعامل مع التعبيرات النمطية من خلال الفئة Regex، التي توفر طرقًا ملائمة لمعالجة النصوص. في هذه المقالة، سنشرح أساسيات التعبيرات النمطية في Kotlin مع أمثلة توضيحية تساعدك على إتقان هذه الأداة بسرعة.

\n\n

ما هي التعبيرات النمطية؟

\n\n

التعبير النمطي هو سلسلة من الأحرف تحدد نمطًا للبحث في النص. على سبيل المثال، النمط \\\\d{3} يبحث عن ثلاثة أرقام متتالية، بينما [A-Z]+ يبحث عن حرف كبير واحد أو أكثر.

\n\n

في Kotlin، يتم استخدام الفئة Regex للتعامل مع التعبيرات النمطية، ويمكن إنشاؤها بطريقتين:

\n\n
// الطريقة الأولى: عبر المُنشئ\nval regex1 = Regex("\\\\d+")\n\n// الطريقة الثانية: عبر الامتداد toRegex()\nval regex2 = "\\\\d+".toRegex()\n
\n\n

الطرق الأساسية لـ Regex في Kotlin

\n\n

توفر الفئة Regex عدة طرق رئيسية للتعامل مع السلاسل النصية:

\n\n
    \n
  • matches() — تتحقق مما إذا كانت السلسلة بأكملها تطابق النمط
  • \n
  • containsMatchIn() — تتحقق مما إذا كانت السلسلة تحتوي على تطابق واحد على الأقل
  • \n
  • find() — تجد أول تطابق
  • \n
  • findAll() — تجد جميع التطابقات
  • \n
  • replace() — تستبدل التطابقات بسلسلة محددة
  • \n
  • split() — تقسم السلسلة وفقًا للنمط
  • \n
\n\n

مثال 1: التحقق من عنوان البريد الإلكتروني

\n\n

لنبدأ بمثال عملي — التحقق من صحة عنوان البريد الإلكتروني:

\n\n
fun 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

نتيجة التنفيذ:

\n
user@example.com: صحيح\ninvalid-email: غير صحيح\ntest@domain.co.uk: صحيح\n@gmail.com: غير صحيح
\n\n

مثال 2: استخراج أرقام الهواتف

\n\n

لنفترض أن لدينا نصًا يحتوي على أرقام هواتف مختلفة، ونريد استخراج جميع الأرقام بتنسيق +7 (XXX) XXX-XX-XX:

\n\n
fun 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\n
fun 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


                
                

المدونات

توصيات الكتب