مطابقة الأنماط باستخدام Regex
جزء من قسم Logic & Flow في رحلة Java على Coddy — الدرس 47 من 59.
توفر فئتا Pattern و Matcher أدوات قوية لعمليات التعبيرات النمطية (regex) في Java. أولاً، دعونا نفهم كيفية استخدامها:
أنشئ pattern باستخدام Pattern.compile():
Pattern pattern = Pattern.compile("cat");
// ينشئ نمطًا للعثور على "cat"أنشئ matcher لنصك:
String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// يقوم بإنشاء matcher للنصالآن يمكنك العثور على التطابقات باستخدام matcher.find():
while (matcher.find()) {
System.out.println("Found at: " + matcher.start());
}بعد تنفيذ الكود أعلاه، يكون الناتج هو: Found at: 4
فهم الأساليب:
<b>matcher.find()</b>- يبحث عن التكرار التالي للنمط في النص- يرجع
trueإذا تم العثور على تطابق - يرجع
falseإذا لم يعد هناك المزيد من التطابقات - هذا هو سبب استخدامه في حلقة
while- للعثور على جميع التكرارات
- يرجع
<b>matcher.start()</b>- يرجع فهرس البداية (الموقع) لآخر تطابق تم العثور عليه بواسطة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());
}
// المخرجات:
// Found at: 0
// Found at: 8التحدي
سهلقم بإنشاء طريقة (method) تسمى findWords تأخذ وسيطين (arguments):
- سلسلة نصية (
text) للبحث فيها - سلسلة نصية (
word) للعثور عليها
يجب أن تقوم الطريقة بـ:
- استخدام Pattern و Matcher للعثور على جميع تكرارات الكلمة
- إرجاع سلسلة نصية تحتوي على المواقع التي تم العثور فيها على الكلمة
- يجب أن تكون المواقع مفصولة بمسافات
يجب أن تكون رسائل الإرجاع كالتالي:
- إذا كان أي مدخل null: قم بإرجاع "Invalid input"
- إذا لم يتم العثور على الكلمة: قم بإرجاع "Not found"
- إذا تم العثور عليها: قم بإرجاع المواقع (على سبيل المثال، "4 10 15")
ورقة مرجعية
توفر فئتا Pattern و Matcher أدوات قوية لعمليات التعبيرات النمطية (regex) في 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());
}الطرق (Methods) الرئيسية:
<b>matcher.find()</b>- يبحث عن التكرار التالي للنمط- يعيد
trueإذا تم العثور عليه، وfalseإذا لم تكن هناك تطابقات أخرى - يُستخدم في حلقة (loop) للعثور على جميع التكرارات
- يعيد
<b>matcher.start()</b>- يعيد فهرس البداية لآخر تطابق تم العثور عليه- يتم استدعاؤه بعد نجاح عملية
find()
- يتم استدعاؤه بعد نجاح عملية
جرّب بنفسك
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));
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات2HashMap الجزء الأول
ما هو الـ HashMap؟تعريف الـ HashMapالوصول إلى القيمالتحقق من وجود المفتاحتعديل القواميسملخص - HashMap5HashSet الجزء الثاني
رياضيات - اتحاد الـ HashSetsرياضيات - تقاطع الـ HashSetرياضيات - فرق المجموعاترياضيات - الفرق المتناظرالمجموعات الجزئية والشاملةالتكرار عبر المجموعات8عمليات السلاسل النصية المتقدمة
أساسيات StringBuilderمقدمة إلى StringBufferأساسيات Regular Expressionsمطابقة الأنماط باستخدام RegexString Tokenizerتنسيق النصوص المتقدم3HashMap الجزء الثاني
دوال HashMapالتكرار باستخدام keySet()التكرار باستخدام entrySet()HashMap متداخلمراجعة - إدارة المستودعمراجعة - عمليات HashMap6التحكم المتقدم في تدفق البرنامج
العبارات المعنونةتعبير Switchمطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكم