0Pricing
Java Academy · درس

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

replaceAll والمراجع الخلفية

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

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

لا يقتصر استخدام Regex على البحث؛ إذ يمكنه تحويل النص. يستبدل replaceAll كل تطابق بسلسلة استبدال.

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("a1b22c333");
        System.out.println(m.replaceAll("#"));
    }
}

اختصار String.replaceAll

إن String.replaceAll(regex, replacement) تعبير مختصر مريح يجمع النمط داخليًا.

public class Main {
    public static void main(String[] args) {
        String cleaned = "hello   world  again".replaceAll("\\s+", " ");
        System.out.println(cleaned);
    }
}

replaceFirst

يستبدل replaceFirst التطابق الأول فقط، ويترك التطابقات اللاحقة من دون تغيير.

public class Main {
    public static void main(String[] args) {
        String s = "cat cat cat".replaceFirst("cat", "dog");
        System.out.println(s);
    }
}

مراجع المجموعات في عمليات الاستبدال

تُدرج $1 و$2 وما شابهها في سلسلة الاستبدال النص الذي التقطته تلك المجموعات. ويتيح ذلك إعادة ترتيب المحتوى المتطابق أو إعادة تنسيقه.

public class Main {
    public static void main(String[] args) {
        String iso = "30/05/2026".replaceAll("(\\d{2})/(\\d{2})/(\\d{4})", "$3-$2-$1");
        System.out.println(iso);
    }
}

مراجع المجموعات المسماة

يمكنك أيضًا الإشارة إلى المجموعات المسماة في الاستبدال باستخدام ${name}.

public class Main {
    public static void main(String[] args) {
        String r = "alice@example.com"
            .replaceAll("(?<user>\\w+)@(?<host>[\\w.]+)", "${user} at ${host}");
        System.out.println(r);
    }
}

تهريب علامة الدولار والشرطة المائلة العكسية

لأن $ و\ رمزان خاصان في عمليات الاستبدال، اهرب علامة الدولار الحرفية باستخدام \$. ويتولى Matcher.quoteReplacement تهريبهما نيابةً عنك.

import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        String price = "100".replaceAll("\\d+", Matcher.quoteReplacement("$100"));
        System.out.println(price);
    }
}

الاستبدالات المحسوبة باستخدام دالة replaceAll

منذ Java 9، يمكن لـ Matcher.replaceAll قبول دالة، ما يتيح لك حساب كل استبدال انطلاقًا من التطابق.

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("a1 b2 c3");
        String out = m.replaceAll(mr -> String.valueOf(Integer.parseInt(mr.group()) * 10));
        System.out.println(out);
    }
}

تحويل الكلمات المتطابقة إلى أحرف كبيرة

تتألق صيغة الدالة عندما يعتمد الاستبدال على النص المتطابق، مثل تحويل كل كلمة إلى أحرف كبيرة.

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

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\b\\w").matcher("hello there world");
        String title = m.replaceAll(mr -> mr.group().toUpperCase());
        System.out.println(title);
    }
}

appendReplacement وappendTail

للحصول على تحكم كامل، استخدم حلقة مع find وأنشئ الناتج عبر appendReplacement ثم appendTail. هذه هي التقنية التقليدية منخفضة المستوى.

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("a1b2");
        StringBuilder sb = new StringBuilder();
        while (m.find()) {
            m.appendReplacement(sb, "[" + m.group() + "]");
        }
        m.appendTail(sb);
        System.out.println(sb);
    }
}

المراجع الخلفية في النمط

تطابق المراجع الخلفية في النمط، مثل \1، نصًا مكررًا، وهي مفيدة لدمج الكلمات المكررة أثناء الاستبدال.

public class Main {
    public static void main(String[] args) {
        String fixed = "the the end end".replaceAll("\\b(\\w+) \\1\\b", "$1");
        System.out.println(fixed);
    }
}

إزالة الأحرف غير المرغوب فيها

من الاستخدامات الشائعة تنقية الإدخال باستبدال كل ما يقع خارج مجموعة مسموح بها بسلسلة فارغة.

public class Main {
    public static void main(String[] args) {
        String digits = "(555) 123-4567".replaceAll("[^0-9]", "");
        System.out.println(digits);
    }
}

تحقق سريع

في سلسلة استبدال مخصّصة لـ replaceAll، ماذا تعني $2؟

مراجعة

لقد حوّلت النص باستخدام Regex:

  • يستبدل replaceAll وreplaceFirst التطابقات؛ وتوفّر String اختصارات لذلك.
  • تُدرج $1 و${name} مجموعات الالتقاط في عمليات الاستبدال؛ واهرب علامة $ الحرفية باستخدام \$ أو عبر quoteReplacement.
  • تحسب صيغة الدالة في replaceAll الاستبدالات انطلاقًا من كل تطابق.
  • يوفّر appendReplacement مع appendTail تحكمًا يدويًا كاملًا.

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

هل درس «الاستبدال باستخدام Regex» مجاني؟

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

ماذا ستتعلم في «الاستبدال باستخدام Regex»؟

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

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

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

كم من الوقت يستغرق درس «الاستبدال باستخدام Regex»؟

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

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

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

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

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