التعبيرات النمطية في جافا مع أمثلة: للمبتدئين

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

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

ابدأ الدورة

التعبيرات النمطية في جافا: دليل شامل للمبتدئين

\n\n

التعبيرات النمطية (regex) هي أداة قوية للبحث عن النص واستخراجه واستبداله وفقًا لنمط معين. في جافا، يتم العمل مع التعبيرات النمطية من خلال الحزمة java.util.regex. في هذه المقالة، سنشرح أساسيات التعبيرات النمطية في جافا، ونتعلم كيفية استخدام الفئات Pattern و Matcher، بالإضافة إلى استعراض أمثلة عملية.

\n\n

1. الفئات الأساسية للعمل مع regex في جافا

\n\n

في جافا، يتم استخدام فئتين رئيسيتين للعمل مع التعبيرات النمطية:

\n\n
    \n
  • Pattern — يمثل تعبيرًا نمطيًا مُجمّعًا.
  • \n
  • Matcher — يقوم بعمليات البحث والمطابقة مع النص.
  • \n
\n\n

يوجد أيضًا طريقة ملائمة String.matches()، والتي تسمح بالتحقق بسرعة مما إذا كانت السلسلة تطابق النمط، لكنها أقل مرونة.

\n\n

مثال 1: مطابقة بسيطة

\n\n
import java.util.regex.*;\n\npublic class RegexExample1 {\n    public static void main(String[] args) {\n        String text = "مرحبًا، عالم! جافا هي أفضل لغة.";\n        String pattern = "جافا";\n\n        Pattern p = Pattern.compile(pattern);\n        Matcher m = p.matcher(text);\n\n        if (m.find()) {\n            System.out.println("تم العثور على الكلمة: " + m.group());\n        } else {\n            System.out.println("لا توجد مطابقات");\n        }\n    }\n}
\n\n

الإخراج: تم العثور على الكلمة: جافا

\n\n

2. الرموز الوصفية وفئات الأحرف

\n\n

تستخدم التعبيرات النمطية أحرفًا خاصة (رموز وصفية) لوصف الأنماط:

\n\n
    \n
  • . — أي حرف (باستثناء سطر جديد)
  • \n
  • \\d — رقم [0-9]
  • \n
  • \\D — ليس رقمًا
  • \n
  • \\w — حرف أو رقم أو شرطة سفلية [a-zA-Z0-9_]
  • \n
  • \\W — ليس حرفًا
  • \n
  • \\s — حرف مسافة بيضاء
  • \n
  • \\S — ليس حرف مسافة بيضاء
  • \n
  • [abc] — أحد الأحرف a أو b أو c
  • \n
  • [^abc] — أي حرف باستثناء a أو b أو c
  • \n
\n\n

مثال 2: البحث عن الأرقام في النص

\n\n
import java.util.regex.*;\n\npublic class RegexExample2 {\n    public static void main(String[] args) {\n        String text = "رقمي: 123-456-7890";\n        String pattern = "\\\\d+"; // رقم واحد أو أكثر\n\n        Pattern p = Pattern.compile(pattern);\n        Matcher m = p.matcher(text);\n\n        while (m.find()) {\n            System.out.println("تم العثور على رقم: " + m.group());\n        }\n    }\n}
\n\n

الإخراج:

\n
تم العثور على رقم: 123\nتم العثور على رقم: 456\nتم العثور على رقم: 7890
\n\n

3. المحددات الكمية والحدود

\n\n

تحدد المحددات الكمية عدد مرات تكرار عنصر النمط:

\n\n
    \n
  • * — 0 مرة أو أكثر
  • \n
  • + — مرة واحدة أو أكثر
  • \n
  • ? — 0 أو مرة واحدة
  • \n
  • {n} — بالضبط n مرة
  • \n
  • {n,} — n مرة أو أكثر
  • \n
  • {n,m} — من n إلى m مرة
  • \n
\n\n

تساعد الحدود في تحديد مكان وجود النمط:

\n\n
    \n
  • ^ — بداية السطر
  • \n
  • $ — نهاية السطر
  • \n
  • \\b — حدود الكلمة
  • \n
\n\n

مثال 3: التحقق من عنوان البريد الإلكتروني

\n\n
import java.util.regex.*;\n\npublic class RegexExample3 {\n    public static void main(String[] args) {\n        String email = "user@example.com";\n        String pattern = "^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$";\n\n        boolean isValid = Pattern.matches(pattern, email);\n        System.out.println("البريد الإلكتروني صالح: " + isValid);\n    }\n}
\n\n

الإخراج: البريد الإلكتروني صالح: true

\n\n

4. مجموعات الالتقاط واستبدال النص

\n\n

تسمح مجموعات الالتقاط باستخراج جزء

المدونات

توصيات الكتب