لمحة جافاوية 61: التحقق من المدخلات 4: الإخوة الطماعون

السلام عليكم

لم أركم منذ مدة طويلة
لو علمتم ما بي لعذرتموني
على كل أنا أخرج كل يوم الساعة 8 صباحاً من بيتي
وأعود الساعة السادسة مساءاً
لا تظنوا أني أعود لأرتاح
فالدراسة تستهلك جل وقتي
إن لم تكن الدراسة فهو الإشراف في منتدى الفريق العربي
إن لم يكن هذا ولا ذاك فهو قضاء الوقت في مشاهدة الأفلام أو المسلسلات أو أي شيء آخر يشاهد
أعرف أني مقصر ولا شيء مما ذكرته يجب أن يؤثر على كتاباتي
لكني أعتقد أن الكتابة تحتاج إلى هدوء بال
كما تحتاج مني أن أتعلم أشياء جديدة لكي أعلمكم إياها
وإلا بالله عليكم قولوا لي ما الذي سأكتبه لكم
على كل يبدو أني أترك ورائي آلاف الثقوب التي يمكن الكتابة فيها وبقوة
لكن وبكل تأكيد ينقصني هدوء البال وهو أمر مهم حتى أستطيع بناء المقال بشكل جيد
على العموم ها أنا أعود لأرتق بعض الثقوب التي تركتها وارائي
كنت قد كلمتكم مسبقاً عن التعابير المنتظمة وكيفية الاستفادة منها في التحقق من المدخلات
هذا الكلام كان منذ فترة طويلة
على كل ما لم أقله لكم أن التعابير المنتظمة ليست مفيدة فقط في التحقق من المدخلات
بل هي مفيدة أيضاً في عمليات البحث والاستبدال
في البداية أريد أن أذكركم بآلية الاستفادة منها في التحقق من البيانات
في هذه الفقرة أترككم مع المقالات التي كتبها مسبقاً عن الموضوع
لمحة جافاوية 27: التحقق من المدخلات
لمحة جافاوية 30: فحص المدخلات 2
لمحة جافاوية 48: التحقق من المدخلات 3
الآن دعوني أعطيكم مثالاً على استخدامها في عملية البحث

String website="http://modonat-alaa.freehostia.com/";
String afterReplace1=website.replaceFirst("http", "https");
String afterReplace2=website.replaceFirst("[/]{2}", "/");
String afterReplace3=website.replaceAll("\\w+", "/");
System.out.println(afterReplace1);
System.out.println(afterReplace2);
System.out.println(afterReplace3);

وكالعادة يمكنك عمل نفس الشيء باستخدام Pattern و Matcher

String string="alcac";
pattern = Pattern.compile("a.*");
matcher = pattern.matcher(string);
str = matcher.replaceFirst("z");
System.out.println(str);

لاحظوا معي في المثال السابق أننا فعلياً نبحث عن أول حدوث لـ a متبوعاً بحرف أو أكثر ثم يأتي بعدها حرف c
طيب دعوني نجرب هذه العبارة على المثال السابق alcac
يفترض أن نحصل على zac
الغريب في الموضوع أننا حصلنا على z فقط
على العموم هذه نقطة حديثنا اليوم
علامتي + و * الطماعتين greedy * greedy +
لاحظنا في مثالنا السابق أن التعبير عندما طبق على الكلمة alcac لم يعترف بحرف c الرابع وإنما استمر إلى الحرف الأخير
وهو لعمري شيء فيه بعض الصحة لأن علامة النقطة تدل على أي حرف و c يعتبر حرف لذا فإنه أكمل البحث حتى آخر حرف
ومن هنا سميت العلامات * و + بأنهم طماعتين
لأنهما يلتهمان كل ما يمكن التهامهم ولا يكتفون بالقليل
كما قلنا السلوك الحاصل هنا منطقي بعض الشيء
طيب ماذا لو كنت فعلاً تريد أول حصول للحرف c ولا تريد أن يمتد معاك الموضوع إلى النهاية
دعوني أوضح بمثال
أريد أن أستبدل الكلمات التي تبدأ بالحرف a وتنتهي بالحرف c بحرف a
هنا تأتي دور العلامة ؟ هذه العلامة تحد من سلوك الإخوة الطماعين وتجعلهم قنوعين بعض الشيء
دعونا نجرب نفس المثال السابق مع إضافة علامة ؟ بعد علامة *
سنلاحظ أن الناتج أصبح Fac

وهكذا نكون أضفنا شيئاً جديداً على ما تعلمناه مسبقاً عن التعابير المنتظمة
وأعتقد أني لن أعود للتعابير المنتظمة مرة أخرى
ما لم أتعرض لضغط شنيع من الإخوة الطماعين :)

تحياتي

Tags: , , , , , , , ,

Leave a Reply