JavaRush /مدونة جافا /Random-AR /التعبيرات العادية في جافا
terranum
مستوى
Milan

التعبيرات العادية في جافا

نشرت في المجموعة
التعبير العاديالتعبير العادي هو نوع من النمط الذي يمكن تطبيقه على النص (سلسلة، في Java). توفر Java الحزمة java.util.regex لمطابقة التعبيرات العادية. التعبيرات العادية تشبه إلى حد كبير لغة برمجة Perl وهي سهلة التعلم للغاية. التعبير العادي إما يطابق النص (جزء منه) أم لا. * إذا كان التعبير العادي يطابق جزءًا من النص، فيمكننا العثور عليه. ** إذا كان التعبير العادي مركبًا، فيمكننا بسهولة معرفة أي جزء من التعبير العادي يطابق أي جزء من النص.

المثال الأول

يتطابق التعبير العادي " [a-z] +" مع جميع الأحرف الصغيرة في النص. [a-z]يعني أي حرف من aإلى zشامل، +ويعني حرفًا واحدًا أو أكثر. لنفترض أننا قمنا بتوفير السلسلة "الرمز 2 لتعلم جافا التعليمي". كيفية القيام بذلك في Java أولاً، يجب عليك إنشاء قالب:
import java.util.regex.*;
Pattern p = Pattern.compile([a-z]+);
بعد ذلك عليك إنشاء matcherالنص عن طريق إرسال رسالة على الرسم التخطيطي:
Matcher m = p.matcher(“code 2 learn java tutorial”);
ملحوظة: لا يوجد أي منشئين Pattern، Matcherفنحن نقوم بإنشائهما باستخدام أساليب الفصل Pattern. Pattern Class:يشكل كائن الفئة تمثيلاً للتعبير العادي. لا توفر فئة النمط أي مُنشئات عامة. لإنشاء قالب، يجب عليك أولاً استدعاء إحدى الطرق الثابتة العامة، والتي تقوم بعد ذلك بإرجاع كائن من الفئة Pattern. تأخذ هذه الأساليب تعبيرًا عاديًا كوسيطة. Matcher Class:كائن Finder هو محرك يفسر النمط وينفذ عمليات المطابقة على سلسلة الإدخال. مثل Patternالفصل الدراسي، Matcherلا يوجد به منشئون عامون. يمكنك الحصول على كائن Matcherعن طريق استدعاء أسلوب matcherعلى كائن فئة Pattern. بمجرد الانتهاء من هذه الخطوات، والآن لدينا مثيل للفئة Matcher m ، يمكننا الآن التحقق مما إذا كان النمط قد تم العثور عليه أم لا، وإذا كان الأمر كذلك، في أي موضع، وما إلى ذلك. m.matches()يُرجع صحيحًا إذا كان النمط يطابق السلسلة بأكملها، ويُرجع خطأً بخلاف ذلك. m.lookingAt()يُرجع صحيحًا إذا كان النمط يطابق بداية السلسلة، ويُرجع خطأً بخلاف ذلك. m.find ()يُرجع صحيحًا إذا كان النمط يطابق أي جزء من النص.

العثور على المباراة

بعد نجاح المطابقة، ستقوم m.start() بإرجاع فهرس الحرف الأول المطابق وستعيد m.end() فهرس الحرف الأخير المطابق بالإضافة إلى واحد. إذا جرت محاولة غير ناجحة ولم يتم العثور على أي تطابق، m.start()فسوف m.end()يرميونIllegalStateException
  • هذا RuntimeExceptionحتى لا تضطر إلى الإمساك به.
قد يبدو من الغريب إرجاع m.end()فهرس آخر حرف مطابق بالإضافة إلى واحد، ولكن هذا هو بالضبط ما تفعله معظم String.
  • على سبيل المثال،“Now is the time“.substring(m.start(), m.end())
سيعود نفس السلسلة. دعونا نلقي نظرة على الكود:
import java.util.regex.*;

public class RegexTest {
    public static void main(String args[]) {
        String pattern = "[a-z]+";
        String text = "code 2 learn java tutorial";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);
        while(m.find()) {
            System.out.print(text.substring(m.start(), m.end()) + "*");
        }
    }
}
Output: code*learn*java*tutorial*

طرق إضافية

إذا كان هناك تطابق، ثم:
  • m.replaceFirst(replacement)تقوم بإرجاع سلسلة جديدة، حيث سيتم استبدال السلسلة الفرعية الأولى التي تطابق النمط بهاreplacement
  • m.replaceAll(replacement)تقوم بإرجاع سلسلة جديدة، حيث سيتم استبدال كل سلسلة فرعية تطابق النمط
  • m.find(StartIndex)ابحث عن المطابقة التالية بدءًا من الفهرس المحدد
  • m.reset()يعيد تعيين القالب
  • m.reset(NewText)يعيد ضبط الباحث ويعطيه نصًا جديدًا (ربما String، StringBufferأو CharBuffer)

بناء جملة التعبير العادي

  • ^يطابق بداية السطر.
  • $يطابق نهاية السلسلة.
  • .يطابق أي حرف واحد باستثناء السطر الجديد. يتيح استخدام الخيار m مطابقة السطر الجديد.
  • [...]يطابق أي حرف واحد بين قوسين.
  • [^ ...]يطابق أي حرف مفرد ليس بين قوسين.
  • \Aابدأ الخط بأكمله.
  • \zنهاية السطر بأكمله.
  • \Zنهاية السطر بأكمله باستثناء فاصل السطر الأخير.
  • re*يطابق 0 أو أكثر من تكرارات التعبير السابق.
  • re+مطابقة واحدة أو أكثر للتعبير السابق.
  • re?يطابق 0 أو 1 بموقع التعبير السابق.
  • re{n}يطابق تمامًا N عدد مرات ظهور التعبير السابق.
  • re{n,}يطابق N أو أكثر من تكرارات التعبير السابق.
  • re{n, m}يطابق على الأقل n وعلى الأكثر m تكرارات التعبير السابق.
  • a|bيطابق أ أو ب.
  • (re)مجموعة من التعبيرات العادية وتذكر النص الموجود.
  • (?: re)مجموعات من التعبيرات العادية التي لا تتذكر النص الموجود.
  • (?> re)يطابق نمطًا مستقلاً بدون عوائد.
  • \wيطابق الحروف والأرقام [a-zA-Z_0-9].
  • \Wهذه ليست حروف أو أرقام.
  • \sيطابق المساحات. يعادل [\t\n\r\f].
  • \Sليست أحرف مسافة بيضاء.
  • \dيطابق الأرقام. يعادل [0-9].
  • \Dلا يتطابق مع الأرقام.
  • \Gيطابق نقطة المباراة الأخيرة.
  • \nيطابق السطر الجديد.
  • \bيتطابق عند حد الكلمة.
  • \Bالتطابقات ليست على حدود الكلمة.
  • \n, \t, etc.السطر الجديد، حرف الإرجاع، علامة التبويب، وما إلى ذلك من الأحرف.
  • \Qاقتبس كافة الأحرف قبل \E.
  • \Eبدأ الاقتباس بـ \Q وينتهي.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION