Rugular Expression 3


كتابة الأخ :MrBassam

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

بعد مراجعتى لما سبق ان كتبته فى الجزء الاول والثانى اكتشفت انى أخطأت فى أخر جزء – على الاقل –

اقتباس:
المشاركة الأساسية كتبها MrBassam مشاهدة المشاركة
ملحوظه: فى حالة البحث عن اى عدد من الرموز ربما تكون النتائج اكبر مما تتوقع ولذلك ينصح بوضع شرط للنهايه مثلاً نص ثابت ينتهى به التعبير او الصيغه مثل

رمز برمجي:
<[Bb]>.*</[Bb]>

للبحث عن النص السميك فى نص htmlيتبع[/size][/color]

الحقيقه انه حتى مع وضع شرط نهاية فسيتجاوزه الـ Regular Expression حتى اخر شرط, تخيل معى اننا سنستخدم الصيغة السابقه والتى هى

رمز برمجي:
<[Bb]>.*</[Bb]>

للبحث خلال صفحة Html بالشكل التالى

رمز برمجي:
<body><h1>welcome</h1><br><B>this is my website</B><br><b>Coming Soon</b>

عند تطبيق هذا المثال سوف ينتج شئ غير متوقع , سوف ينتج النص التالى

رمز برمجي:
<B>this is my website</B><br><b>Coming Soon</b>

والسبب انه عند استخدام رموز التكرار + و * يتم البحث عن ما يليها من اخر النص , بمعنى اخر البحث عن اكبر كمية من الحروف المطابقه
قد يبدو هذا غريباً ولاكن هذا ما يحدث فى الحقيقه حيث كان متوقعاً فى المثال السابق ان تكون النتائج

رمز برمجي:
<B>this is my website</B>
<b>Coming Soon</b>

ولاكن هذا لم يحدث وبدلاً من ذلك كان الناتج كما راينا

للتغلب على هذه المشكله نستخدم الصيغه التاليه للبحث عن أصغر كمية حروف ممكنة
؟* بدلاً من استخدام *
؟+ بدلاً من أستخدام +

جرب المثال السابق مع أستبدال الـ * بالـ ?*
يسمى كلاً من ?+ و ?* بالصيغه البطيئة لانها بالفعل كذلك حيث تدقق حرف حرف

مطابقة المكان

فى بعض الاحيان ربما تريد مطابقة او البحث عن مكان عبر النص
ولاكن ما هو المكان؟
يمكن اعتبار المكان حرف تخيلى – وليس حرف تحكم – تستخدمه فى كتابة صيغك لتعبر عن اماكن معينه مثل بداية الكلمة اونهاية الكلمة او بداية الجمله او نهايتها

مطابقة بداية او نهاية الكلمه
تخيل انك تريد البحث عن كل الكلمات form فى النص التالى
A form have a FormBorderStyle which Gets or sets the border style of the form.
الموضوع بكل بساطه يمكنك استخدام الصيغه التاليه للبحث عن الكلمه form او Form

رمز برمجي:
[Ff]orm

لاكن ترى كيف تكون النتائج
سوف تكون النتائج ما يلى
Form التى هى ثانى كلمه وهذا جيد
Form التى تقع ضمن الكلمه FormBorderStyle
Form التى هى اخر كلمه

فى المثال السابق كنا نريد البحث عن كلمه فقط وليس مجرد مجموعة حروف ضمن كلمه فى هذا الحاله نستخدم الـ \b لنعبر عن مكان بداية او نهاية كلمه . استبدل الصيغه السابقة بالتاليه

رمز برمجي:
\b[Ff]orm\b

وجرب
سوف تحصل على form التى فى البدايه و form التى فى النهاية فقط
لاحظ ان الـ b\ليست المسافه التى تسبق الكلمة او التى تليها وانما هى بالفعل مكان بداية كلمه او نهاية كلمة
ملحوظه: فى بعض لغات البرمجه ربما يعبر >\ عن مكان بداية كلمه و <\ عن مكان نهاية كلمه

مطابقة بداية الجمله او نهايتها
اذا اردت ان تبحث فى او النص عن صيغه معينه يمكنك استخدام ^ التى تعبر عن بداية جمله
ملحوظه: فى اغلب الاحيان يعامل الـ Regular Expression كل النص على اساس انه جمله واحده اى لايكترس بالحروف r\n\رغم ذلك يمكنك ان تخبر الـ Regular Expression ان يعامل النص على انه اكثر من جمله من خلال تضمين الخيار (?m) فى بداية الصيغه.
ملحوظه: هذا الخيار غير متوفر فى كل لغات البرمجه التى تدعم Regular Expression
ملحوظه: كثيراً من اللغات بها ضبط الخيارات من خلال طرق او خصائص لكائن الاستعلام عن الـ Regular Expression خارج الصيغه , هذا الخيارات قد تكون ضبط حساسية حالة الاحرف او معاملت التص على انه اكثر من جمله والكثير
راجع وثائق لغة البرمجه التى تستخدم لمذيداً من التفاصيل

الصيغ الفرعية Subexpressions
فى نصوص الـ Html يوجد Tag مسئول عن ترك سطر فارغ هو <BR>
تخيل انك تريد البحث عن الاسطر الفارغه التى تذيد عن ثلاث سطور مثل

<br><br><br><br><br>
<br><br><br><br>
<br><br><br>

فى النص التالى

<body><center><br>Welocome<br><br><br><br>to my site

لقد تعرضنا للتكرار فيما سبق اذاً فلنجرب الصيغه التاليه

رمز برمجي:
<br>{3,}

للاسف لم تفلح , حاول ان تستنتج لماذا
سوف تبحث هذه الصيغه عن نص يشبه التالى

<br>>>
<br>>>>

حيث ان التكرار يكون للحرف الذى يسبق اقواس التكرار
والحل فى هذه الحالة استخدام الصيغ الفرعية
باختصار يمكنك تقسيم صيغتك الى صيغ فرعية باستخدام الاقواس () وتعامل ما بين الاقواس على انه مجرد حرف او ان صح التعبير عنصر من عناصر الصيغه
استبدل الصيغه السابقه بالتاليه وجرب

رمز برمجي:
(<br>){3,}

سوف يعمل بأذن الله
ملحوظه بسيطه: الاقواس () تعتبر رموز خاصه اى يجب ان تسبق بشرطه مائله عند البحث عنها ذاتها.

تعتبر الصيغ الفرعيه من اهم اسباب قوة الـ Reqlar Expression حاول ان تفهمها جيداً

كثيراً من المطورين يحيطون صيغهم بالاقواس () بشكل طبيعى وهذا لاباس به الا انه يوثر قليلاً فى سرعة التنفيذ.

الصيغ الفرعيه المتشابكه:
يمكنك ان تضع تعبير فرعى داخل اخر فرعى من تعبير اخر….. . لك مطلق الحريه ان تفعل ما تريد حتى تحصل على ما تريد.

ربما تبدو الصيغ الان معقدة الى حداً ما
لا تقلق تذكر ان تقراء الصيغ من الداخل من داخل الاقواس اقرائها تعبير تعبير او حرف حرف
ولا تنزعج من شكلها .

المره القادمه بأذن الله سوف نتعرف على المراجع والاستبدال وارجاع ما بداخل الصيغ كما سنتعرف الشروط

  1. لا توجد تعليقات حتى الآن.
  1. No trackbacks yet.

شاركنا برأيك ,لكي نرقى بالمدونة,يمكنك أضافة تعليق عن طريق حسابك في Facebook