لمحة جافاوية 48: التحقق من المدخلات 3

السلام عليكم

اشتقت لكم يا شباب
الكسل شيء سيء جداً
بصراحة ليس الكسل هو المسؤول عن تأخري عليكم
المسؤول الرئيسي هو انشغالي بعدة أعمال
لكنكم تظلون فصلي وتستحقون أن أخصص لكم بعض الوقت
حتى ولو على حساب أعمال أخرى
(اشتقنا لك يا أستاذ)
غريبة الأخ عبده مشتاق لي كنت أظنك تكرهني أكثر من امرأة أبيك لو كان لديك واحدة :)
على فكرة ذكرتني بقصة القط والفأر
القط يظن نفسه يكره الفأر ويريد قتله
في الحقيقة أن القط يجد الحياة مملة بدون الفأر
وأنا اشتقت لك يا أخ عبده
بالمناسبة متى رجعت من الحج يا فالح
(بصراحة عندما سألت الشيخ هناك أخبرني بأن الحج باقي عليه ستة أشهر
كنت أريد أن أبقى هناك لكني قلت لنفسي وتترك الأخ علاء يستفرد بالغلابة)
يا قلبك الحساس يا أخي
أحسست نفسي وحشاً آكلاً لحقوق الناس
أو على أقل تقدير ظالماً يضرب الناس بدون سبب
على كل حال لن أتوافق أنا والأخ عبده ما حيينا
دعوكم من هذا كله ولنبدأ درس اليوم
اليوم سأستكمل الحديث عن موضوع التحقق من المدخلات
كنا تكلمنا مسبقاً عن الأقواس في التعابير المنتظمة
1- أقواس مربعة وتستخدم لتحديد نوع الحروف
مثال [i[A-Z
2- أقواس معقوفة وتستخدم لتحديد التكرار
مثال {2,3}
3- الأقواس الدائرية وتستخدم لتقسيم التعبير إلى تعابير أصغر
مثال ((a*(ab)
أذكرها هنا مرة أخرى من باب المراجعة

لا أعرف من أين أبدأ الحديث عن ما أريد الحديث عنه
(أعط مثالاُ عليه)
فكرة جيدة يا أخ عبده لكني سأسألكم سؤالاً ومن أجوبتكم سيتضح ما أريد الحديث عنه
أريد تعبيراً يفحص إذا كان النص يتبع الهيكلية الخاصة بلغة HTML

<tag></tag>

(سهلة جداُ)
أتحفنا يا أخ عبده

<([A-Za-z]*)></([A-Za-z]*)>

ممممممممممممم
طيب مبدئياً يبدو لنا أن الأخ عبده مصيب
لكن لحظة يجب أن يكون الوسم البادئ يساوي الوسم النهائي
بمعنى أنه لو كان الوسم البادئ <a>
فيجب أن يكون الأخ الوسم النهائي هو <a/>
بالنسبة للتعبير الذي وضعه الأخ عبده فهو لا يضمن لنا هذه الميزة
فهو قد يسمح بكون الوسم البادئ <a>
والوسم النهائي <بطيخة/>
-فعلياً لا يمكن أن يكون بطيخة وإنما قصدت أي كلمة إنجليزية-
ومن هنا ظهر مصطلح المؤشر الرقمي Backreferences
حيث تم الاتفاق على حفظ أي تعبير جزئي في الذاكرة بحيث يمكن الرجوع إليه باستخدام ترتيبه بين التعابير الجزئية الأخرى
-أقصد بالتعابير الجزئية أي جملة واقعة فيما بين الأقواس الدائرية-

يتم معرفة التعبير الذي نريده باستخدام الأرقام بمعنى أن أول تعبير جزئي يرمز له بالرقم 1 والذي يليه بالرقم 2 وهكذا
وعلى هذا الأساس نعدل التعبير المنتظم السابق إلى

<([A-Za-z]*)></\1>

الرقم واحد في التعبير السابق يرمز إلى الجملة التي انطبق عليها التعبير

[A-Za-z]*

نلاحظ أنا أحياناً كثيرة لا نحتاج إلى هذه الخاصية
لكنها تقوم باستهلاك الذاكرة فما الحل؟؟
في حالة عدم الحاجة إلى المؤشر الرقمي نستخدم علامة التعجب مع النقطتين الرأسيتين للتنبيه إلى ذلك
مثال على ذلك من لمحة التحقق من المدخلات2
عندما أردنا تعبيراً للاسم الرباع كان التعبير كالتالي

([A-Z]\w* ){3}[A-Z]\w*

التعبير السابق سيقوم بتخزين أي جملة تطابق ما بين القوسين على اعتبار أنها مؤشر رقمي
لكننا فعلياً لم نستخدم التعبير الرقمي لهذا يجب تعديل التعبير السابق إلى

(؟:[A-Z]\w* ){3}[A-Z]\w*

هكذا يعتبر أنهينا الموضوع الرئيسي
سنعطي أمثلة لفهم الموضوع بشكل أكبر
نريد تعبير منتظم ينطبق على الجمل التالية فقط

axaxax
bxbxbx
cxcxcx

تفضلي يا أماني

([a-c])x\1x\1

أحسنت يا أماني
طيب هل ينطبق التعبير التالي على الجملة abc=abc

([abc]+)=\1

تفضل يا ضياء
نعم ينطبق
جواب صحيح
طيب لو غيرنا التعبير إلى

([abc])+=\1

فهل ينطبق؟
ضياء ممممممم
أظنه نعم
سالي تفضلي
أظن لا
لماذا يا سالي؟
تهيألي أنه مطب لنا لهذا توقعت ذلك
فعلاً إجابتك صحيح وذلك للسبب التالي
لأن المؤشر الرقمي في الحالة الأخيرة يرمز إلى حرف واحد فقط
والتكرار خارج المؤشر
لهذا فهو سيخزن أولاً الحرف a
ثم يستبدله بالحرف b
ثم يستبدله بالحرف c
طيب لو غيرنا السؤال
هل ينطبق التعبير السابق على الجملة abc=c
الأخ عبده تفضل
نعم ينطبق
ممتاز يا أخ عبده
جيد جدا
ملاحظة:ئم أحب الترجمة الحرفية للمصطلح لهذا ابتكرت موضوع المؤشر الرقمي بسبب كون الرقم هو الذي يشير إلى تعبير معين دون التعابير الأخرى
تحذير: يجب قراءة اللمحتين التحقق من المدخلات1 و التحقق من المدخلات2 للاستفادة من هذه اللمحة
(يا أخي لست أفهم لماذا تحذرنا بعدما قرأناها
لن تكف عن هذه الألعاب الصبيانية)
أخبرتك يا أخ عبده أن هذه متعتي في الحياة أن أجعل حياتكم جحيماً
تعديل:
شكر خاص للأخ ASDen من منتديات الفريق العربي للبرمجة فهو الذي عرفني على Backreferences

المراجع:
1-مقالة بعنوان Round Brackets for Grouping and Backreferences

http://www.regular-expressions.info/brackets.html

تحياتي

Tags: , , , , , , ,

6 Responses to “لمحة جافاوية 48: التحقق من المدخلات 3”

  1. Cara قال:

    This is great info to know.

  2. admin قال:

    Thank you Carla
    any question I will try to help as I can

    Alaa

  3. Salam قال:

    يعطيك العافية م.علاء
    شي حلو .. لا مدخلات غير مرغوب فيها بعد الآن
    كإنو محاكاة لـ XML Tag Validator ..

  4. admin قال:

    الله يعافيك يا سلام
    فعلاً هذه الآلية مفيدة في عملية فحص لغات الأوسمة tags
    مثل HTML ,XML … إلخ

    تحياتي

  5. abuoof قال:

    موضوع مهم ونفسي اتعلمه ولكن ليس الآن ساعود له عما قريب

  6. admin قال:

    في انتظار عودتك

    تحياتي

Leave a Reply