السلام عليكم و رحمة الله و بركاته
بالنسبة للـ regular expressions (aka regex)
انا مش هقول احنا ممكن نستخدمها في ايه و كده .. أنا هدخل في كيفية استخدامها على طول
الرموز المستخدمة في الـ RE:
. ^ $ * + ? { [ ] \ | ( )
هنبدأ بـ '[' و ']' .. و دول بستخدموا في تحديد الـ Character Class .. و ده جزء من جملة الـ RE
مثال1:[abc]
لما نعمل سيرش في الكلاس دي ... هيطلعلنا حاجة من الموجودين جوا الكلاس
يعني هيطللع a و b و c ... (إذا كانوا موجودين)
و في طريقة تانية نمثل بيها نفس الكلاس دي ... و هي
[a-c]
علامة '-' بتخلينا ناخد range من الحروف أو الأرقام
يعني لو كتبنا [a-z] يبقى كل الحروف من a لـ z ... بس خدوا بالكوا ... دي Lower Case كلها
مثال 2:طيب افرض عايزين نعمل سيرش على الكلام اللي فيه أرقام بس .. مفيهوش حروف خالص
في عندنا رمز '^' ده معناه NOT
يعني من الآخر ... عشان نحقق الكلام اللي فوق .. المفروض نكتب:
[^a-zA-Z]
لاحظوا [a-zA-Z] عشان الـ Capital && Small Letters
مثال 3:افرض بقى عايز أدور على الرمز '[' نفسه ...
في الحالة دي بنستخدم الرمز '\' (Back Slash) عشان نلغي المعنى الحقيقي بتاع الرمز '[' ... فهيكون الـ Expression كالآتي:
[\[]
و بما اننا دخلنا في الرمز ده '\' .. فخلينا نكمل كلام فيه شوية
في عندنا predefined special sequences
هما اللي في الجدول ده:
\d
| Matches any decimal digit; this is equivalent to the class [0-9]
|
\D
| Matches any non-digit character; this is equivalent to the class [^0-9]
|
\s
| Matches any whitespace character; this is equivalent to the class [ \t\n\r\f\v]
|
\S
| Matches any non-whitespace character; this is equivalent to the class [^ \t\n\r\f\v]
|
\w
| Matches any alphanumeric character; this is equivalent to the class [a-zA-Z0-9_]
|
\W
| Matches any non-alphanumeric character; this is equivalent to the class [^a-zA-Z0-9_]
|
يعني لو عايزين ندور على حاجة فيها مسافة و حرف a مثلا ... نكتب:
[\sa]
لحد دلوقتي اشطة أوي!!!
Repeating
مثال 4:عايزين نعمل سيرش على كلمة زي ba6e5 مثلا .. بس عندنا حرف الـ e مش عارفين هوا موجود كام مرة
يعني ممكن يكون ba6ee5 أو ba6eeeeeeeeeeeeee5 ... أو أي عدد من الحرف e
في الحالة دي هنستخدم الرمز '*' ... ده باختصار شديد معناه Zero Or More Characters
يعني ... لما نكتب:
[ba6e*5]
يبقى ممكن يجيبلي الكلمات (ba65 , ba6e5 , ba6ee5 , ba6eee5) and so on
مثال 5:طيب افرض انا عايز اجيب اي واحدة من الكلمات دي:
(ba6e5 , ba6ee5 , ba6eee5) and so on
بس مش عايز أجيب ba56 ... عشان دي مش عاجباني ... مش من عائلة البطيخ يعني من الآخر
فكده هنستخدم رمز '+' و ده الفرق الوحيد بينه و بين الـ '*' انه بيجيب One or more Charachters
يعني هنعمل:
[ba6e+5]
مثال 6:طيب انا مش عايز كل البطيخ ده ... ايه اللي يخليني أزود عن حرفين e ...
كده هندخل في الرمز ده '?'
و ده معناه Zero Or One Character
يعني مثلا ... خلينا نكتب:
[ba6ee?5]
كده هيطلعلنا قيمتين بس ... اللي هما (ba6e5 , ba6ee5)
آخر حاجة في الـ Repeating بقى و تعتبر أصعب حاجة فيهم (أصعب السهل يعني):
الرمزين '{' and '}'
و دول بيحددوا أقل عدد و أكبر عدد من مرات تكرار الحرف أو الكلاس
مثال 6:
ba6e{1,10}5
الناتج بتاع دي بيدني كلمة بطيخ بحرف الـ e أقل حاجة مرة واحدة ... و أكتر حاجة 10 مرات
يعني الـ range بتاع حرف الـ e ... من 1 لـ 10
(ba6e5, ...................... , ba6eeeeeeeeee5) (متعدوهمش ... هما 10 بالظبط!!)
ممكن بقى نحدد رقم maximum و مانحددش minimum ... و هوا هيحط الـdefault بتاعنا هو رقم 0
ba6e{,10}5
و ممكن برضه نحدد minimum و مانحددش maximum ... و دي هتبقى من صفر لما لا نهاية
(هيا مش مالا نهاية أوي ... هيا لحد 2 مليون ... بس عموما معتقدش انك هتحط حاجة فيها 2 مليون احتمال ... فاعتبره مالا نهاية)
استنتاج أخير:MetaCharacter
| in { and } metacharacter's mode
|
*
| {0,}
|
+
| {1,}
|
?
| {0,1}
|
معلش الموضوع طويييل اوي
و بالرغم من كده .. برضه ده مش الشرح كامل
فياريت لو حد يقدر يكمل على الشرح ده أو يفيدنا بأي أمثلة ميتأخرش علينا بيها
عموما انا عايز أقوللكوا اني مكتبتش ده كله من عندي
انا استعنت بالبايثون توتوريال عشان أعرف أنظم الحكاية ... و اعرف الحاجات اللي ناقصاني فيها
Source
شكرا
سلام