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

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

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

ابدأ الدورة
```html

التعبيرات النمطية في Kotlin: من الأساسيات إلى التقنيات المتقدمة



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



1. إنشاء وبناء جملة Regex الأساسي في Kotlin



في Kotlin، يتم إنشاء التعبير النمطي باستخدام الفئة Regex أو من خلال الامتداد .toRegex() للسلاسل النصية. يتم دعم جميع الرموز الوصفية القياسية والمحددات الكمية.



طرق إنشاء Regex:

// الطريقة 1: عبر المُنشئval regex = Regex("\\\\d{3}-\\\\d{2}-\\\\d{4}")

// الطريقة 2: عبر toRegex()val pattern = "[a-z]+@[a-z]+\\\\.[a-z]+".toRegex()

// الطريقة 3: مع خيارات (غير حساس لحالة الأحرف)val caseInsensitive = Regex("kotlin", RegexOption.IGNORE_CASE)


الرموز الوصفية الأساسية والمحددات الكمية:

  • . — أي حرف (باستثناء سطر جديد)
  • \\d — رقم (0-9)
  • \\w — حرف أو رقم أو شرطة سفلية
  • \\s — حرف مسافة بيضاء
  • ^ — بداية السطر
  • $ — نهاية السطر
  • * — 0 أو أكثر من التكرارات
  • + — 1 أو أكثر من التكرارات
  • ? — 0 أو 1 تكرار
  • {n,m} — من n إلى m تكرار


2. العمليات الأساسية: البحث والتحقق والاستخراج



توفر الفئة Regex عدة طرق للعمل مع النص. دعنا ننظر إلى أهمها.



التحقق من التطابق (matches)

تتحقق الطريقة matches() مما إذا كانت السلسلة النصية بأكملها تتطابق مع النمط بالكامل:

val phonePattern = Regex("\\\\+7\\\\d{10}")println(phonePattern.matches("+79261234567")) // trueprintln(phonePattern.matches("+7926123456")) // false (9 أرقام بدلاً من 10)


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

تقوم الطريقة find() بإرجاع أول تطابق على شكل كائن MatchResult?:

val text = "جهات الاتصال: email@test.com و support@domain.org"val emailRegex = "[\\\\w.]+@[\\\\w.]+\\\\.[a-z]+".toRegex()val match = emailRegex.find(text)println(match?.value) // email@test.comprintln(match?.range) // 10..23 (فهارس البداية والنهاية)


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

للحصول على جميع التطابقات، استخدم findAll()، الذي يُرجع تسلسلاً من النوع Sequence<MatchResult>:

val allMatches = emailRegex.findAll(text)allMatches.forEach { match ->    println("تم العثور على: ${match.value} في الموضع ${match.range.first}")}// الإخراج:// تم العثور على: email@test.com في الموضع 10// تم العثور على: support@domain.org في الموضع 28


التحقق من الوجود (containsMatchIn)

تقوم الطريقة containsMatchIn() بإرجاع قيمة Boolean — هل يوجد تطابق واحد على الأقل:

val hasEmail = emailRegex.containsMatchIn(text)println(hasEmail) // true


3. الاستبدال و split باستخدام Regex



التعبيرات النمطية مناسبة تمامًا لاستبدال أجزاء من السلسلة النصية وتقسيم النص.



استبدال أول تطابق (replaceFirst)

val original = "المعرف: 12345، الرمز: 67890"val digitRegex = "\\\\d+".toRegex()val masked = digitRegex.replaceFirst(original, "***")println(masked) // المعرف: ***، الرمز: 67890


استبدال جميع التطابقات (replace)

val censored = digitRegex.replace(original, "***")println(censored) // المعرف: ***، الرمز: ***


الاستبدال باستخدام لامدا

يمكنك تمرير لامدا سيتم استدعاؤها لكل تطابق

```

المدونات

توصيات الكتب