Menu
CoddyTech
flag Ar iconالعربيةdown icon

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

جزء من قسم المنطق وتدفق التنفيذ في رحلة Java على Coddy. الدرس 47 من 59.

توفّر الفئتان Pattern وMatcher أدوات قوية لعمليات التعبيرات النمطية في 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());
}

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

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

  • matcher.find() - يبحث عن التكرار التالي للنمط في النص
    • يعيد القيمة true إذا تم العثور على تطابق
    • يعيد القيمة false إذا لم تعد هناك تطابقات
    • لهذا السبب نستخدمه في حلقة while - للعثور على جميع التكرارات
  • matcher.start() - يعيد فهرس البداية (الموضع) لآخر تطابق عثر عليه 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());
}
// المخرجات:
// وُجد عند: 0
// وُجد عند: 8
challenge icon

التحدي

سهل

أنشئ أسلوبًا باسم findWords يتلقى وسيطين:

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

يجب أن يقوم الأسلوب بما يلي:

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

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

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

جرّب بنفسك

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اختبر نفسك

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

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم Java عبر الإنترنت

اختبر نمطًا على نصك الخاص: مختبر Regex