تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Rugular Expression الجزء الثالث
#1
كاتب الموضوع : MrBassam

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


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

اقتباس:
[TABLE="width: 100%"]
[TR]
[TD="class: alt2"]المشاركة الأساسية كتبها MrBassam
ملحوظه: فى حالة البحث عن اى عدد من الرموز ربما تكون النتائج اكبر مما تتوقع ولذلك ينصح بوضع شرط للنهايه مثلاً نص ثابت ينتهى به التعبير او الصيغه مثل

كود :
<[Bb]>.*</[Bb]>
للبحث عن النص السميك فى نص htmlيتبع[/size][/color]

[/TD]
[/TR]
[/TABLE]

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

كود :
<body><h1>welcome</h1><br><B>this is my website</B><br><b>Coming Soon</b>
للبحث خلال صفحة Html بالشكل التالى


كود :
<B>this is my website</B><br><b>Coming Soon</b>
عند تطبيق هذا المثال سوف ينتج شئ غير متوقع , سوف ينتج النص التالى


كود :
<B>this is my website</B>
<b>Coming Soon</b>
والسبب انه عند استخدام رموز التكرار + و * يتم البحث عن ما يليها من اخر النص , بمعنى اخر البحث عن اكبر كمية من الحروف المطابقه
قد يبدو هذا غريباً ولاكن هذا ما يحدث فى الحقيقه حيث كان متوقعاً فى المثال السابق ان تكون النتائج


كود :
[Ff]orm
ولاكن هذا لم يحدث وبدلاً من ذلك كان الناتج كما راينا

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

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

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

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

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


كود :
\b[Ff]orm\b
لاكن ترى كيف تكون النتائج
سوف تكون النتائج ما يلى
Form التى هى ثانى كلمه وهذا جيد
Form التى تقع ضمن الكلمه FormBorderStyle
Form التى هى اخر كلمه

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


كود :
<br>{3,}
وجرب
سوف تحصل على 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 حاول ان تفهمها جيداً

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

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

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

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الان فيجوال استوديو 2013 ومعه التحديث الثالث بحزمة واحدة سعود 2 2,568 09-10-14, 05:14 AM
آخر رد: سعود
  درس-التشفير - الجزء الثانى(Deep in) RaggiTech 2 3,048 09-10-12, 06:44 PM
آخر رد: RaggiTech
  كيفيه اداره الاحداث فى بيئه الدوت نت الجزء الثالث how To Handle Events in.net Part 3 RaggiTech 0 1,955 09-10-12, 05:22 PM
آخر رد: RaggiTech
  كيفيه اداره الاحداث فى بيئه الدوت نت الجزء الثانى how To Handle Events in .net Part 2 RaggiTech 0 1,963 09-10-12, 05:21 PM
آخر رد: RaggiTech
  كيفيه اداره الاحداث فى بيئه الدوت نت الجزء الاول part 1 how to Handle Events in .net RaggiTech 0 1,848 09-10-12, 05:20 PM
آخر رد: RaggiTech
  نظرة على جديد الفيجوال بيسك 9 - الجزء الأول RaggiTech 0 2,091 08-10-12, 05:38 PM
آخر رد: RaggiTech
  أجمل مقدمة فى ال Regular Expression RaggiTech 0 2,982 08-10-12, 12:18 PM
آخر رد: RaggiTech
  Visual Studio Extensibility الجزء الثاني- توسيع إطار الأدوات RaggiTech 2 2,364 08-10-12, 12:14 PM
آخر رد: RaggiTech
  Regular Expression الجزء الثانى RaggiTech 0 1,880 08-10-12, 11:54 AM
آخر رد: RaggiTech
  Regular Expression الجزء الاول RaggiTech 0 2,030 08-10-12, 11:53 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم