مطابقة الأنماط باستخدام Regex
جزء من قسم المنطق وتدفق التنفيذ في رحلة 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")
جرّب بنفسك
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 عبر الإنترنت