التعبيرات النمطية في جافا: دليل شامل مع أمثلة برمجية
التعبيرات النمطية (regex) هي أداة قوية للبحث عن النص واستخراجه واستبداله وفقاً لنمط معين. في جافا، يتم التعامل مع التعبيرات النمطية من خلال فئتين رئيسيتين: java.util.regex.Pattern (تجميع النمط) و java.util.regex.Matcher (تنفيذ البحث). في هذه المقالة، سنشرح بناء الجملة والطرق الأساسية ونستعرض أمثلة عملية ستساعدك على استخدام التعبيرات النمطية بثقة في المشاريع الحقيقية.
1. أساسيات العمل مع التعبيرات النمطية في جافا
قبل الانتقال إلى الأمثلة، دعنا نشرح الفئات الرئيسية وكيفية تفاعلها.
فئة Pattern
Pattern هي تمثيل مُجمّع للتعبير النمطي. يتم إنشاؤها بواسطة الطريقة الثابتة Pattern.compile(). بدون التجميع، لا يمكن استخدام التعبير النمطي.
فئة Matcher
Matcher هو "المحرك" الذي ينفذ البحث وفقاً للنمط المحدد في النص. يتم إنشاؤه بواسطة الطريقة pattern.matcher(inputString).
بناء الجملة الأساسي للرموز الوصفية
.— أي حرف (باستثناء فاصل السطر)\\d— رقم (0-9)\\w— حرف أو رقم أو شرطة سفلية\\s— حرف مسافة بيضاء^— بداية السطر$— نهاية السطر*— صفر أو أكثر من التكرارات+— تكرار واحد أو أكثر?— صفر أو تكرار واحد{n,m}— من n إلى m تكراراً[]— مجموعة من الأحرف (مثال:[a-z]— أي حرف صغير)()— مجموعة التقاط
مثال 1: التحقق البسيط من رقم الهاتف
import java.util.regex.*;
public class PhoneValidator { public static void main(String[] args) { String phone = "+7 (999) 123-45-67"; String regex = "^\\\\+7\\\\s\\\\(\\\\d{3}\\\\)\\\\s\\\\d{3}-\\\\d{2}-\\\\d{2}$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(phone); if (matcher.matches()) { System.out.println("الرقم صحيح"); } else { System.out.println("الرقم لا يتطابق مع التنسيق"); } }}2. طرق Matcher: matches() و find() ومجموعة الالتقاط
فهم الفرق بين matches() و find() هو مفتاح النجاح في العمل مع التعبيرات النمطية في جافا.
matches()— يتحقق مما إذا كان النص بأكمله يطابق النمط بالكامل (يضيف ضمنياً^و$).find()— يبحث عن نص فرعي يطابق النمط في أي مكان داخل النص.group()— يعيد التطابق الذي تم العثور عليه أو قيمة مجموعة الالتقاط.
مثال 2: استخراج عناوين البريد الإلكتروني من النص باستخدام find() والمجموعات
import java.util.regex.*;
public class EmailExtractor { public static void main(String[] args) { String text = "جهات الاتصال: support@example.com, info@test.org و admin@site.net."; String regex = "([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)\\\\.([a-zA-Z]{2,})"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(text); while (matcher.find()) { System.out.println("البريد الإلكتروني الكامل: " + matcher.group()); System.out.println("اسم المستخدم: " + matcher.group(1)); System.out.println("النطاق: " + matcher.group(2)); System.out.println("المنطقة: " + matcher.group(3)); System.out.println("---"); } }}مثال 3: التحقق من صحة كلمة المرور باستخدام matches()
المتطلبات: من 8 إلى 20 حرفاً، حرف كبير واحد على الأقل، ر