Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مطابقة الأنماط باستخدام Regex

جزء من قسم Logic & Flow في رحلة Java على Coddy — الدرس 47 من 59.

توفر فئتا Pattern و Matcher أدوات قوية لعمليات التعبيرات النمطية (regex) في Java. أولاً، دعونا نفهم كيفية استخدامها:

أنشئ pattern باستخدام Pattern.compile():

Pattern pattern = Pattern.compile("cat");
// ينشئ نمطًا للعثور على "cat"

أنشئ matcher لنصك:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// يقوم بإنشاء matcher للنص

الآن يمكنك العثور على التطابقات باستخدام matcher.find():

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}

بعد تنفيذ الكود أعلاه، يكون الناتج هو: Found at: 4

فهم الأساليب:

  • <b>matcher.find()</b> - يبحث عن التكرار التالي للنمط في النص
    • يرجع true إذا تم العثور على تطابق
    • يرجع false إذا لم يعد هناك المزيد من التطابقات
    • هذا هو سبب استخدامه في حلقة while - للعثور على جميع التكرارات
  • <b>matcher.start()</b> - يرجع فهرس البداية (الموقع) لآخر تطابق تم العثور عليه بواسطة find()
    • في مثالنا، تبدأ "cat" عند الفهرس 4 في "The cat and dog"
    • يجب استدعاؤه بعد نجاح عملية find()

مثال مع تطابقات متعددة:

Pattern pattern = Pattern.compile("cat");
Matcher matcher = pattern.matcher("cat and cat");

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}
// المخرجات:
// Found at: 0
// Found at: 8
challenge icon

التحدي

سهل

قم بإنشاء طريقة (method) تسمى findWords تأخذ وسيطين (arguments):

  1. سلسلة نصية (text) للبحث فيها
  2. سلسلة نصية (word) للعثور عليها

يجب أن تقوم الطريقة بـ:

  1. استخدام Pattern و Matcher للعثور على جميع تكرارات الكلمة
  2. إرجاع سلسلة نصية تحتوي على المواقع التي تم العثور فيها على الكلمة
  3. يجب أن تكون المواقع مفصولة بمسافات

يجب أن تكون رسائل الإرجاع كالتالي:

  • إذا كان أي مدخل null: قم بإرجاع "Invalid input"
  • إذا لم يتم العثور على الكلمة: قم بإرجاع "Not found"
  • إذا تم العثور عليها: قم بإرجاع المواقع (على سبيل المثال، "4 10 15")

ورقة مرجعية

توفر فئتا Pattern و Matcher أدوات قوية لعمليات التعبيرات النمطية (regex) في Java.

قم بإنشاء pattern باستخدام Pattern.compile():

Pattern pattern = Pattern.compile("cat");
// ينشئ نمطاً للبحث عن "cat"

قم بإنشاء matcher لنصك:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// ينشئ مطابقاً للنص

ابحث عن التطابقات باستخدام matcher.find():

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}

الطرق (Methods) الرئيسية:

  • <b>matcher.find()</b> - يبحث عن التكرار التالي للنمط
    • يعيد true إذا تم العثور عليه، و false إذا لم تكن هناك تطابقات أخرى
    • يُستخدم في حلقة (loop) للعثور على جميع التكرارات
  • <b>matcher.start()</b> - يعيد فهرس البداية لآخر تطابق تم العثور عليه
    • يتم استدعاؤه بعد نجاح عملية find()

جرّب بنفسك

import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static String findWords(String text, String word) {
        // اكتب الكود الخاص بك هنا
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        String word = scanner.nextLine();
        
        if (text.equals("null")) text = null;
        if (word.equals("null")) word = null;
        
        System.out.println(findWords(text, word));
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow