التعبيرات النمطية في جافا: دليل شامل للمبتدئين
\n\nالتعبيرات النمطية (regex) هي أداة قوية للبحث عن النص واستخراجه واستبداله وفقًا لنمط معين. في جافا، يتم العمل مع التعبيرات النمطية من خلال الحزمة java.util.regex. في هذه المقالة، سنشرح أساسيات التعبيرات النمطية في جافا، ونتعلم كيفية استخدام الفئات Pattern و Matcher، بالإضافة إلى استعراض أمثلة عملية.
1. الفئات الأساسية للعمل مع regex في جافا
\n\nفي جافا، يتم استخدام فئتين رئيسيتين للعمل مع التعبيرات النمطية:
\n\n- \n
- Pattern — يمثل تعبيرًا نمطيًا مُجمّعًا. \n
- Matcher — يقوم بعمليات البحث والمطابقة مع النص. \n
يوجد أيضًا طريقة ملائمة String.matches()، والتي تسمح بالتحقق بسرعة مما إذا كانت السلسلة تطابق النمط، لكنها أقل مرونة.
مثال 1: مطابقة بسيطة
\n\nimport 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الإخراج: تم العثور على الكلمة: جافا
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
مثال 2: البحث عن الأرقام في النص
\n\nimport 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\n3. المحددات الكمية والحدود
\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 \\b— حدود الكلمة \n
مثال 3: التحقق من عنوان البريد الإلكتروني
\n\nimport 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
4. مجموعات الالتقاط واستبدال النص
\n\nتسمح مجموعات الالتقاط باستخراج جزء