مطابقة الأنماط باستخدام Regex
جزء من قسم المنطق وتدفق التنفيذ في رحلة Java على Coddy. الدرس 47 من 59.
توفّر الفئتان Pattern وMatcher أدوات قوية لعمليات التعبيرات النمطية في Java. أولًا، لنتعرّف على كيفية استخدامهما:
أنشئ pattern باستخدام Pattern.compile():
Pattern pattern = Pattern.compile("cat");
// ينشئ نمطًا للعثور على "cat"أنشئ matcher لنصك:
String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// ينشئ مطابقًا للنصيمكنك الآن العثور على التطابقات باستخدام matcher.find():
while (matcher.find()) {
System.out.println("Found at: " + matcher.start());
}بعد تنفيذ التعليمات البرمجية أعلاه، يكون الناتج: Found at: 4
فهم الأساليب:
matcher.find()- يبحث عن التكرار التالي للنمط في النص- يعيد القيمة
trueإذا تم العثور على تطابق - يعيد القيمة
falseإذا لم تعد هناك تطابقات - لهذا السبب نستخدمه في حلقة
while- للعثور على جميع التكرارات
- يعيد القيمة
matcher.start()- يعيد فهرس البداية (الموضع) لآخر تطابق عثر عليهfind()- في مثالنا، تبدأ كلمة "cat" عند الفهرس 4 في "The cat and dog"
- يجب استدعاؤه بعد نجاح
find()
مثال على تطابقات متعددة:
Pattern pattern = Pattern.compile("cat");
Matcher matcher = pattern.matcher("cat and cat");
while (matcher.find()) {
System.out.println("Found at: " + matcher.start());
}
// المخرجات:
// وُجد عند: 0
// وُجد عند: 8التحدي
سهلأنشئ أسلوبًا باسم findWords يتلقى وسيطين:
- سلسلة نصية (
text) للبحث فيها - سلسلة نصية (
word) للعثور عليها
يجب أن يقوم الأسلوب بما يلي:
- استخدام Pattern وMatcher للعثور على جميع تكرارات الكلمة
- إرجاع سلسلة نصية تحتوي على المواضع التي تم العثور على الكلمة فيها
- يجب فصل المواضع بمسافات
يجب أن تكون رسائل الإرجاع كما يلي:
- إذا كان أي إدخال null: أعد "Invalid input"
- إذا لم يتم العثور على الكلمة: أعد "Not found"
- إذا تم العثور عليها: أعد المواضع (مثلًا، "4 10 15")
جرّب بنفسك
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static String findWords(String text, String word) {
// اكتب الكود الخاص بك هنا
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine();
String word = scanner.nextLine();
if (text.equals("null")) text = null;
if (word.equals("null")) word = null;
System.out.println(findWords(text, word));
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات2HashMap الجزء الأول
ما هو الـ HashMap؟تعريف الـ HashMapالوصول إلى القيمالتحقق من وجود المفتاحتعديل القواميسملخص - HashMap5HashSet الجزء الثاني
رياضيات - اتحاد الـ HashSetsرياضيات - تقاطع الـ HashSetرياضيات - فرق المجموعاترياضيات - الفرق المتناظرالمجموعات الجزئية والشاملةالتكرار عبر المجموعات8عمليات السلاسل النصية المتقدمة
أساسيات StringBuilderمقدمة إلى StringBufferأساسيات Regular Expressionsمطابقة الأنماط باستخدام RegexString Tokenizerتنسيق النصوص المتقدم3HashMap الجزء الثاني
دوال HashMapالتكرار باستخدام keySet()التكرار باستخدام entrySet()HashMap متداخلمراجعة - إدارة المستودعمراجعة - عمليات HashMap6التحكم المتقدم في تدفق البرنامج
العبارات المعنونةتعبير Switchمطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكمتدرّب بنفسك: مترجم Java عبر الإنترنت
اختبر نمطًا على نصك الخاص: مختبر Regex