الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سلسلة تعلم Regular Expressions

مغلق
بدأه الشهاب الحارق في 26 مارس 2005 · 10 رد · 2,353 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الدرس السابع : Using Sub Expressions إستخدام جزء من الصيغة أو التعبير الصيغي .

مدة الدرس 4 دقائق

ينقسم هذا الدرس إلى قسمين

الأول المجموعات Groups والثاني المجموعات المتداخلة Nested Groups

تعرف التجزئة بالمجموعات Groups وذلك بإستخدام الأداة () القوسين المنحنيين أو الدائريين Round Brackets .

القوسين المنحنين أداة تجعل من الصيغة المعقدة Complex Expression الي صيغة منسقة Documenting Expression

إضافة إلى ذلك آلية التحكم في الصيغة يعتمد إعتمادً كلياً على المجموعات

وكذلك تقنية الـ Back Reference والذي سيكون عنوان درسنا القادم , تعتمد على المجموعات .

المهم إذا رأيت قوسين منحنين في صيغةِ ما, فتأكد أن هذه مجموعة مالم يكتب قبلها بالـ backslash \

أو ما يعرف بـ Escaping .

لِنفترض أننا نريد أن نكتب صيغة مقاربة للتحقق من عنوان الـ IP

ملاحظة (الطريقة التي سنكتبها لا تتوافق مع الـ IP ) والسبب أننا لا نريد ان نخوض في أدوات لم نأخذها بعد .

لكن المثال يتطلب علينا أن نكتب صيغة مقاربة لها فقط .

سنقوم بكتابة صيغة دون إستخدام المجموعات بهذا الشكل

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

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

0.12.111.200

الان سنقوم بكتابتها بإستخدام أداة المجموعات () بهذا الشكل

^(\d{1,3}\.){3}\d{1,3}$

تلاحظ أن أداة المجموعة () ساهمت في إختصار الصيغة , بحيث تم جمع المقطع الاول \d{1,3}\.

والثاني \d{1,3}\.والثالث \d{1,3}\. من الصيغة في مقطع واحد (\d{1,3}\.){3}

و إستخدمنا أداة القوسين المعقوفين {3} لتكرار العملية ثلاثة مرات ,

بدلاً من تكرارها بشكل كلاسيكي مطول \d{1,3}\.\d{1,3}\.\d{1,3}\.

الغرض من ذلك أننا نريد أن نكرر الصيغة ثلاثة مرات فقط , بحيث يتحقق من كل واحد إلى ثلاثة أرقام مع فاصلة نقطية اي نقطة (.)

وثم أكملنا الصيغة بهذا الشكل

\d{1,3}

والسبب في ذلك أننا لا نريد ان نكرر النقطة بعد الخانة الرابعة من الأرقام .

القسم الثاني Nested Groups المجموعات الداخلية

هي بأختصار مجموعة في مجموعة أو مجموعات في مجموعات

ومثالُ ذلك أننا نريد بالمثال الثاني أن نكرره مرتين بشكل مجموعة متداخلة سيكون بهذا الشكل.

^((\d{1,3}\.){2}){2}\d{1,3}$

التحليل

كل الذي قمنا به أننا بعد القوسين المعقوفين للمجموعة الأولى وضعنا عليها قوس منحني

لتصبح مجموعة داخلية ثم تبعناها بقوسين معقوفين {2} طلبنا بهذا تكرار المجموعة الجديدة بما أشتملت من

مجموعة داخلية بأن تكرر مرتين فقط ثم بعد ذلك أتبعناها بهذه الصيغة \d{1,3} لنتفادا مشكلة النقطة .

ملاحظة: لا تقتصر أداة () المجموعة على التنسيق فقط و إنما له فؤاد عديدة سنتطرق لها

في الدرس القادم ....... ودمتم في رعاية الله .

أسئلة الدرس السابع كالتالي

1 – أكتب صيغة تقوم بإنشاء أرقام من 1 إلى 9 في كل خانتين وتفصلهم علامة الـ (-)

وقم بتكرار العملية ثلاثة مرات مثلاً 34-23-34

2 – أكتب صيغة مماثلة بتكرار العملية السابقة ضعفها بحيث تصبح 12-12-12-12-12-12

3 – ماذا تعني الصيغة التالية

\( \)

4- صح أم خطأ هذه الصيغة

 \(^ab\)

نريد أن نتحقق من قوسين ليس بداخلهما الحرفان ab

هذا والله أعلى و أعلم

السلام عليكم

Using_Sub_Expressions.zip

1

في المثال يتضح المقال

#2

جزاك الله ألف خير

(جاري التخزين) إحم

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#3

تلميذ جديد, أرجو أن تتابع هذا الموضوع فهو من المواضيع المهمة التي يغفل عنها الكثير من المبرمجين, وأنا كنت منهم

#5

السلام عليكم

حياك الله إستاذ الكل إسماعيل

كانت محاولة طيبة وجيدة (لكن ليست موفقه) الجواب الصحيح للسؤال الأول فقط هي كالتالي

 Const str2 As String = "^([1-9]{1,2}-){2}[1-9]{1,2}$"

وفقكم الله

في المثال يتضح المقال

#6

الاجوبة:

السؤال الثاني:

^([1-9]{1,2}-){5}[1-9]{1,2}$

السؤال الثالث:

يعني النص يجب ان يحتوي على الكلمة "( )" .لأن \ معناها حرف خاص

السؤال الرابع:

الصيغة خاطئة .

الصواب هو:

\([^ab]\)

بافتراض انك تريد ظهور حرف واحد فقط داخل الصيغة و هذا الحرف لا يكون a او b ..

تم تعديل هذه المشاركة بواسطة undo في 2 أبريل 2005 في 18:47

اقتباس
الـ VB هى الأساس ... بتبرمج بيها بالاحساس

ولا سيمي كولن ولا أقواس ... وتعلمها سهل لكل الناس

راكب فيها موتور نفاث ... دي سريعه جدا وباخلاص

الـ VB هى التراث ... للذكور والايناث :D

الـ VB لغة عريقه ... حتى اسأل Anwarica

من ديوان الشاعر السي شاربي "معتز شمس"
#7

السلام عليكم أجوبه صحيحة و إستاذ مجتهد يستحق التحية والتقدير و الوقوف والاحترام .

الأجوبة كالتالي

1 - ^([1-9]{1,2}-){2}[1-9]{1,2}$

2 - ^([1-9]{1,2}-){5}[1-9]{1,2}$ or ^(([1-9]{1,2}-){2}){2}[1-9]{1,2}$

3 - Match the () characters

4 - Wrong Pattren because if you not use ^ at the beginning of the pattren then it means as the repeator tool

for instance ^[1-9]^2$ means repeat digit twice from 1 to 9 matches 11 22 and etc... this concept

does not impact on VB.NET , While Does on Other languages , so What does this pattren mean ?

In VB.NET the ^ tool has several meaning one it matchs the begining of the string or negates mean

if enclosed within [] , so whereas both of them not used then it has wrong meaning

and it acts as the begining Tool in the wrong position. God knows.

في المثال يتضح المقال

#8

سؤال:

بالنسبة للأداة ^ عندما لا تكون موجودة في اول الصيغة فهل ذلك يعني انه يمكن الاستغناء عنها و استخدام الgroupingكما تعلمنا في هذا الدرس؟؟

يعني

^[1-9]^2$

تصبح:

^[1-9](2)$

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

ام ان هناك شئ لا افهمه؟؟:$

اقتباس
الـ VB هى الأساس ... بتبرمج بيها بالاحساس

ولا سيمي كولن ولا أقواس ... وتعلمها سهل لكل الناس

راكب فيها موتور نفاث ... دي سريعه جدا وباخلاص

الـ VB هى التراث ... للذكور والايناث :D

الـ VB لغة عريقه ... حتى اسأل Anwarica

من ديوان الشاعر السي شاربي "معتز شمس"
#9

شكراً أخي الغملاسي, بس أنا فهمت من السؤال الأول أنك تريد كتابة رقمين في كل مرة, على كل الهدف من التمرين وصل, وأرجو أن تستمر السلسلة الرائعة والتي أعادتني من جديد لتعلم التعابير النظامية

#10

السلام عليكم

ماشاء الله عليك أخي undo مثابر و دؤوب الله يجعلك على هذا المنوال إلى الأبد إن شاء الله

بالنسبةِ لسؤالك الأول لا طبعاً لا نستغني عن ^ لان أداة المجموعات لها وظيفة مغايرةً عن وظيفة الـ ^

يعني كل واحد له تخصصه B) ولان المجموعات الفائدة الجلية منها هي التكرار Reusable .

و تحليل الصيغة الأولى التي عرضتها ^[1-9]^2$ فانت في لغة أخرى في الـ .NET قد تكون C# or J# or etc but not vb.net

تقصد بها الشكل التالي

^[1-9]{2}$

أي البحث عن رقم من 1 إلى 9 يتكرر مرتين مثل 11 22 99 لكن ليس 111

أما الصيغة الثانية ^[1-9](2)$ فلا تحتاج إلى مجموعة ويمكن أن تكون بهذا الشكل

^[1-9]2$

أي أبحث عن رقم من 12 إلى الرقم 92 فقط أو بمعنى أسهل أبحث عن رقم من 1 إلى 9 يليه الرقم 2 فقط .

أما هذا

ام ان هناك شئ لا افهمه؟؟:$

فلم أفهمه هل هو سؤال أم تعجب أم (شجب و إستنكار) :wacko: وربما أداة لم نتعرف عليها بعد :rolleyes:

..............................................

يا أخي إسماعيل أنته كبير والكبير كبير و أي هدف بل إن شاء الله أهداف وركلات ترجيحية على الطريقة الـرجكسية

والله يوفقكم لما فيه الخير والبركة

السلام عليكم .

والله أعلم

تم تعديل هذه المشاركة بواسطة الغملاسي في 3 أبريل 2005 في 13:58

في المثال يتضح المقال

#11
اقتباس
ام ان هناك شئ لا افهمه؟؟:$

فلم أفهمه هل هو سؤال أم تعجب أم (شجب و إستنكار) wacko.gif وربما أداة لم نتعرف عليها بعد rolleyes.gif

:D :D

انا فقط حاولت ان اكتب وسم عرض :s لكني بدلاً من كتابته استخدمت $ بدلاً من s

اقتباس
الـ VB هى الأساس ... بتبرمج بيها بالاحساس

ولا سيمي كولن ولا أقواس ... وتعلمها سهل لكل الناس

راكب فيها موتور نفاث ... دي سريعه جدا وباخلاص

الـ VB هى التراث ... للذكور والايناث :D

الـ VB لغة عريقه ... حتى اسأل Anwarica

من ديوان الشاعر السي شاربي "معتز شمس"

هذا الموضوع مغلق.

مواضيع مشابهة