Skip to content

التعبيرات النمطية (Regex)

💡 دليل التعلم: التعبيرات النمطية تبدو كرموز هيروغليفية؟ في الواقع هي مجرد "لغة مصغرة لوصف أنماط النص". يأخذك هذا الفصل من الصفر لفهم جوهر التعبيرات النمطية، وتعلم استخدام بضع رموز رئيسية لحل 80% من مشاكل البحث والتحقق من النصوص.


0. لماذا تحتاج التعبيرات النمطية؟

تخيل السيناريوهات التالية:

  • استخراج جميع عناوين IP من سجل طويل
  • التحقق من صحة تنسيق البريد الإلكتروني الذي أدخله المستخدم
  • استبدال جميع التواريخ في نص من 2024/01/15 إلى 2024-01-15
  • استخراج جميع الروابط من شفرة مصدر صفحة ويب

باستخدام البحث العادي عن السلاسل؟ ستحتاج لكتابة الكثير من منطق if-else. باستخدام التعبيرات النمطية؟ نمط واحد في سطر يحل المشكلة.


1. مقدمة في التعبيرات النمطية: جاهز في ثلاث دقائق

👇 جرّب: أدخل تعبيراً نمطياً وشاهد النتائج في الوقت الفعلي

Regular Expressions: Search Engine for TextPattern matching · capture groups · live preview
//
Match results3 match(es)
My phone is 13812345678, landline is 010-12345678, and email is test@example.com
#1"13812345678"
#2"010"
#3"12345678"
Try presets:
Core idea:A regular expression is a small language for describing text patterns with special symbols. It appears everywhere in search, replacement, and validation.

💡 مفهوم في جملة واحدة

التعبير النمطي = استخدام رموز خاصة لوصف "أي نوع من النص تبحث عنه". \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

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')
// true

Python

python
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. الخلاصة

📚 النقاط الرئيسية

  1. التعبيرات النمطية = لغة مصغرة لوصف أنماط النص، تُستخدم للبحث والمطابقة والاستبدال
  2. ثلاثة أنواع من اللبنات: فئات الأحرف (ماذا تطابق) + المُكمِّمات (كم مرة) + الموضع/التجميع
  3. \d \w \s هي الفئات الثلاث الأكثر استخداماً، تغطي الأرقام والكلمات والمسافات
  4. لا حاجة للكتابة من الصفر: السيناريوهات الشائعة لها أنماط ناضجة جاهزة لإعادة الاستخدام
  5. الجشع مقابل الكسول: الافتراضي جشع (يطابق أكثر)، أضف ? للكسول (يطابق أقل)

الخطوة التالية: