التعبيرات النمطية (Regex)
💡 دليل التعلم: التعبيرات النمطية تبدو كرموز هيروغليفية؟ في الواقع هي مجرد "لغة مصغرة لوصف أنماط النص". يأخذك هذا الفصل من الصفر لفهم جوهر التعبيرات النمطية، وتعلم استخدام بضع رموز رئيسية لحل 80% من مشاكل البحث والتحقق من النصوص.
0. لماذا تحتاج التعبيرات النمطية؟
تخيل السيناريوهات التالية:
- استخراج جميع عناوين IP من سجل طويل
- التحقق من صحة تنسيق البريد الإلكتروني الذي أدخله المستخدم
- استبدال جميع التواريخ في نص من
2024/01/15إلى2024-01-15 - استخراج جميع الروابط من شفرة مصدر صفحة ويب
باستخدام البحث العادي عن السلاسل؟ ستحتاج لكتابة الكثير من منطق if-else. باستخدام التعبيرات النمطية؟ نمط واحد في سطر يحل المشكلة.
1. مقدمة في التعبيرات النمطية: جاهز في ثلاث دقائق
👇 جرّب: أدخل تعبيراً نمطياً وشاهد النتائج في الوقت الفعلي
"13812345678""010""12345678"💡 مفهوم في جملة واحدة
التعبير النمطي = استخدام رموز خاصة لوصف "أي نوع من النص تبحث عنه". \d يمثل رقماً، و + يمثل واحداً أو أكثر، لذا \d+ يعني "رقم واحد أو أكثر".
2. المفهوم الأساسي: التجميع كقطع بناء
جوهر التعبيرات النمطية هو استخدام ثلاثة أنواع من اللبنات لبناء النمط الذي تريده:
2.1 اللبنة الأولى: فئات الأحرف (أي أحرف تطابق)
| البنية | المعنى | مثال |
|---|---|---|
. | أي حرف | a.c ← abc, a1c, a c |
\d | رقم [0-9] | \d\d ← 42, 99 |
\w | حرف/رقم/شرطة سفلية | \w+ ← hello, user_1 |
\s | مسافة بيضاء | يطابق المسافات وعلامات الجدولة |
[abc] | أي حرف من المجموعة | [aeiou] ← حروف العلة |
[^abc] | ليس من المجموعة | [^0-9] ← أحرف غير رقمية |
2.2 اللبنة الثانية: المُكمِّمات (كم مرة تطابق)
| البنية | المعنى | مثال |
|---|---|---|
* | صفر مرة أو أكثر | ab* ← a, ab, abbb |
+ | مرة واحدة أو أكثر | ab+ ← ab, abbb (لا يطابق a) |
? | صفر أو مرة واحدة | colou?r ← color, colour |
{3} | تماماً 3 مرات | \d{3} ← 123 |
{2,4} | من 2 إلى 4 مرات | \d{2,4} ← 12, 1234 |
2.3 اللبنة الثالثة: الموضع والتجميع
| البنية | المعنى | مثال |
|---|---|---|
^ | بداية السطر | ^Hello ← أسطر تبدأ بـ Hello |
$ | نهاية السطر | end$ ← أسطر تنتهي بـ end |
\b | حدود الكلمة | \bcat\b ← cat (لا يطابق catch) |
(...) | مجموعة التقاط | (\d+)-(\d+) ← التقاط منفصل |
a|b | أو | cat|dog ← cat أو dog |
3. تطبيق عملي: أنماط تحقق شائعة
3.1 التحقق من البريد الإلكتروني
[\w.+-]+@[\w-]+\.[\w.]+التفكيك:
[\w.+-]+— جزء اسم المستخدم (حروف وأرقام ونقاط وإشارة زائد وشرطات)@— رمز @ حرفي[\w-]+— جزء النطاق\.— النقطة مُهروبة[\w.]+— نطاق المستوى الأعلى
3.2 التحقق من رقم الهاتف (الصين)
1[3-9]\d{9}التفكيك:
1— يبدأ بـ 1[3-9]— الرقم الثاني من 3-9\d{9}— يليه 9 أرقام
3.3 التحقق من قوة كلمة المرور
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$التفكيك:
(?=.*[a-z])— حرف صغير واحد على الأقل (تأكيد استباقي)(?=.*[A-Z])— حرف كبير واحد على الأقل(?=.*\d)— رقم واحد على الأقل.{8,}— الطول الإجمالي 8 أحرف على الأقل
4. استخدام التعبيرات النمطية في الكود
JavaScript
const text = '联系方式:13812345678 或 15099887766'
const regex = /1[3-9]\d{9}/g
const phones = text.match(regex)
// ['13812345678', '15099887766']
// الاستبدال
text.replace(/\d{4}(?=\d{4}$)/, '****')
// إخفاء الأرقام الأربعة الوسطى من رقم الهاتف
// التحقق
/^[\w.+-]+@[\w-]+\.[\w.]+$/.test('user@example.com')
// truePython
import re
text = 'السعر 99 يوان، خصم 20 يوان'
numbers = re.findall(r'\d+', text)
# ['99', '20']
# الاستبدال
re.sub(r'\d+', 'X', text)
# 'السعر X يوان، خصم X يوان'
# التقاط بالمجموعات
match = re.search(r'(\d+)-(\d+)', '2024-01-15')
match.group(1) # '2024'
match.group(2) # '01'5. الجشع مقابل الكسول: فرق رئيسي
النص: <b>hello</b> and <b>world</b>| النمط | النتيجة | الشرح |
|---|---|---|
<b>.*</b> | <b>hello</b> and <b>world</b> | جشع: يطابق أقصى ما يمكن |
<b>.*?</b> | <b>hello</b> | كسول: يطابق أقل ما يمكن |
💡 تذكر
الوضع الافتراضي جشع. أضف ? بعد المُكمِّم للتحول للوضع الكسول. في معظم الحالات تحتاج الوضع الكسول.
6. الخلاصة
📚 النقاط الرئيسية
- التعبيرات النمطية = لغة مصغرة لوصف أنماط النص، تُستخدم للبحث والمطابقة والاستبدال
- ثلاثة أنواع من اللبنات: فئات الأحرف (ماذا تطابق) + المُكمِّمات (كم مرة) + الموضع/التجميع
- \d \w \s هي الفئات الثلاث الأكثر استخداماً، تغطي الأرقام والكلمات والمسافات
- لا حاجة للكتابة من الصفر: السيناريوهات الشائعة لها أنماط ناضجة جاهزة لإعادة الاستخدام
- الجشع مقابل الكسول: الافتراضي جشع (يطابق أكثر)، أضف
?للكسول (يطابق أقل)
الخطوة التالية:
- متغيرات البيئة و PATH - فهم تهيئة النظام
- SSH والمصادقة بالمفاتيح - الاتصال الآمن بالخوادم البعيدة