0Pricing
Java Academy · درس

البحث والمطابقة

matches وfind وlookingAt

البحث والمطابقة درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

ثلاث طرق لتطبيق نمط

يوفّر Matcher ثلاثة اختبارات أساسية:

  • يتطلب matches() أن يطابق الإدخال بالكامل.
  • يتطلب lookingAt() وجود تطابق عند البداية.
  • يبحث find() عن تطابق في أي موضع.
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+").matcher("42");
        System.out.println(m.matches());
    }
}

matches: الإدخال بالكامل

تعيد matches القيمة true فقط إذا وافقت السلسلة بأكملها النمط، كما لو كان النمط مثبتًا عند الطرفين.

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("\\d+");
        System.out.println(p.matcher("123").matches());
        System.out.println(p.matcher("123abc").matches());
    }
}

lookingAt: تطابق عند البداية

ينجح lookingAt إذا كان الإدخال يبدأ بتطابق، حتى إذا لم يطابق الجزء المتبقي النمط.

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("\\d+");
        System.out.println(p.matcher("123abc").lookingAt());
        System.out.println(p.matcher("abc123").lookingAt());
    }
}

find: تطابق في أي موضع

يفحص find إلى الأمام بحثًا عن التطابق التالي. ويعيد true إذا وُجد تطابق ابتداءً من الموضع الحالي وما بعده.

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("\\d+");
        System.out.println(p.matcher("abc123def").find());
    }
}

التكرار على جميع التطابقات باستخدام find

يؤدي استدعاء find داخل حلقة إلى المرور على كل تطابق في الإدخال.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+").matcher("a1bb22ccc333");
        while (m.find()) {
            System.out.println(m.group());
        }
    }
}

مواضع التطابق: start وend

بعد نجاح التطابق، يعرض start() وend() نطاق الفهارس، بينما يعرض group() النص المتطابق.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+").matcher("abc123");
        if (m.find()) {
            System.out.println(m.group() + " at [" + m.start() + "," + m.end() + ")");
        }
    }
}

المراسي مع find

تتيح المراسي ^ و$ لـ find أن يتصرف مثل اختبارات البداية والنهاية. هنا يطابق ^\d+ الأرقام الموجودة عند البداية تمامًا فقط.

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("^\\d+");
        System.out.println(p.matcher("123abc").find());
        System.out.println(p.matcher("abc123").find());
    }
}

إعادة ضبط Matcher

يعيد reset() Matcher إلى البداية، لكي تتمكن من فحص الإدخال نفسه مرة أخرى.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("a").matcher("aaa");
        int first = 0;
        while (m.find()) first++;
        m.reset();
        int second = 0;
        while (m.find()) second++;
        System.out.println(first + " " + second);
    }
}

إعادة استخدام Matcher مع إدخال جديد

يعيد reset(newInput) استخدام كائن Matcher نفسه مع سلسلة مختلفة، متجنبًا تخصيص كائن جديد.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+").matcher("abc");
        m.reset("xyz789");
        System.out.println(m.find());
        System.out.println(m.group());
    }
}

ملخص الفرق بين matches وfind

اختر وفقًا للغرض: استخدم matches للتحقق من قيمة كاملة، مثل معرّف كامل، واستخدم find لاستخراج أجزاء من نص أكبر أو تحديد مواضعها.

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern id = Pattern.compile("[A-Z]{2}\\d{4}");
        System.out.println(id.matcher("AB1234").matches());
        System.out.println(id.matcher("id=AB1234;").find());
    }
}

عدّ التطابقات

من المهام الشائعة عدّ مرات الظهور. كرّر استخدام find داخل حلقة وزد عدّادًا.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("o").matcher("foo boo zoo");
        int count = 0;
        while (m.find()) count++;
        System.out.println(count);
    }
}

تحقق سريع

ما الطريقة التي تتطلب أن تطابق سلسلة الإدخال بأكملها النمط؟

مراجعة

لقد حدّدت مواضع التطابقات:

  • تختبر matches الإدخال بالكامل؛ وتختبر lookingAt البداية؛ بينما تبحث find في أي موضع.
  • كرّر استخدام find للمرور على جميع التطابقات، واقرأ group وstart وend.
  • يعيد reset الفحص إلى البداية، بينما يعيد reset(input) استخدام Matcher مع نص جديد.

الأسئلة الشائعة

هل درس «البحث والمطابقة» مجاني؟

نعم — نص درس «البحث والمطابقة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «البحث والمطابقة»؟

matches وfind وlookingAt تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «البحث والمطابقة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ترجمة الأنماط
  2. البحث والمطابقة
  3. مجموعات الالتقاط
  4. الاستبدال باستخدام Regex
← العودة إلى Java Academy