الانتقال إلى المحتوى الرئيسي
الوحدة 2 · الدرس 3 من 47/32 في الدورة~10 min
دروس الوحدة (3/4)

الجشع مقابل كسول

بشكل افتراضي، تكون مُحدِّدات الكمية جشعة: فهي تستهلك قدر الإمكان مع الحفاظ على النمط صالحًا. إضافة ? بعد محدد الكمية (*?، +?، ??، {n,m}?) يمنحك الإصدار الكسالى: فهو يستهلك **القليل من ممكن **.

Code
Sample: **uno** e *due*

Greedy pattern  <.*>     matches:  **uno** e *due*   (everything)
Lazy pattern    <.*?>    matches:  **           **
                                   *           *        (4 matches with the g flag)

نفس النمط بالضبط، مع إضافة حرف واحد للاختلاف (?) إلى ملف الكمي)، نتائج مختلفة تماما.

عندما يهم

  • لاستخراج المحتوى بين المحددات (علامات HTML، علامات الاقتباس، بين قوسين) الإصدار lazy هو دائمًا تقريبًا الإصدار الصحيح.
  • للمطابقة حتى نهاية السطر، عادةً ما تريد الجشع (.*).

استراتيجيات الجشع مقابل الكسل في المحرك

يستهلك المُحدِّد الكمي الجشع أكبر قدر ممكن من النص ولا يتراجع إلا إذا اضطر إلى ذلك. من خلال إضافة ? (lazy)، يستهلك المحرك الحد الأدنى المطلق ويتقدم حرفًا واحدًا في كل مرة بحثًا عن المطابقة التالية للنمط.

جربه

تمرين#regex.m2.l3.e1
المحاولات: 0جارٍ التحميل…

استخرج كل علامة HTML من العينة (على سبيل المثال، `**`، `**`، `*`، `*`) باستخدام الإصدار البطيء `.*?`.

جارٍ تحميل المحرر…
إظهار التلميح

يتطابق Greedy <.*> من بداية العلامة الأولى حتى نهاية العلامة الأخيرة. كسول <.*?> يتوقف عند أول > يصادفه.

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#regex.m2.l3.e2
المحاولات: 0جارٍ التحميل…

قم باستخراج كل سلسلة بين علامات الاقتباس المزدوجة في النص (على سبيل المثال، "ciao"، "mondo"). استخدم النسخة البطيئة من محدد الكمية لتجنب القفز إلى عمليات الإغلاق اللاحقة.

جارٍ تحميل المحرر…
إظهار التلميح

".*؟" يتوقف عند أول عرض أسعار مزدوج للإغلاق.

الحل متاح بعد 3 من المحاولات

التحدي الإضافي

تمرين#regex.m2.l3.e3
المحاولات: 0جارٍ التحميل…

Extract all text blocks enclosed in square brackets (e.g. `[text]`), including the brackets, using a lazy quantifier so as not to merge separate blocks.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم \\[ للقوس المفتوح، ثم .*؟ وأخيرًا \\] للقوس المغلق.

الحل متاح بعد 3 من المحاولات