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

مجموعات غير ملتقطة: `(؟:...)`

في كثير من الأحيان تكون هناك حاجة للأقواس فقط من أجل التجميع (تحديد كمي، بديل) وليس لاستخراج القيمة. في هذه الحالة استخدم عدم الالتقاط الإصدار: (?:...). إنه يعمل بشكل مماثل لـ (...) ولكن لا يُنشئ مجموعة مرقمة.

Code
Pattern: (?:https?)://(\w+\.\w+)
Sample:  https://example.com e http://test.org
Match e gruppi:
  match  = "https://example.com"   gruppo1 = "example.com"
  match  = "http://test.org"        gruppo1 = "test.org"

يقوم (?:https?) بتجميع المخطط لتطبيق محدد الكمية ?، لكننا غير مهتم باستخراج https كمجموعة: المجموعة 1 هي مباشرة المجال.

لماذا استخدامه

  1. سهولة القراءة: يفهم القارئ على الفور أن المجموعة موجودة من أجلها فقط هيكل، وليس لاستخراج قيمة.
  2. الأداء: لا يحتاج المحرك إلى تخزين مباراة المجموعة.
  3. الترقيم النظيف: تظل المجموعات المرقمة متوافقة معها "المعلومات التي أحتاجها بالفعل"، دون تدخل.

التحسين مع المجموعات غير الملتقطة

يؤدي استخدام (?:...) إلى إخبار المحرك بتطبيق قواعد التجميع والمحدد الكمي دون إضاعة الذاكرة في تخزين نتائج المطابقة المتوسطة. يوصى بهذا بشدة في الحلقات الثقيلة أو معالجة النصوص الطويلة جدًا.

جربه

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

استخرج النطاق (`example.com`، `test.org`...) من كل عنوان URL في النص. استخدم `(?:https?)` للبروتوكول (لا داعي لالتقاطه) ومجموعة واحدة للمجال.

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

قم بتغيير المجموعة الأولى من (https?) إلى (?:https?): لا حاجة لالتقاطها، أنت تريد المجال فقط.

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

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

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

ابحث عن كل تكرار لـ `ab` كمطابقة واحدة، ولكن دون التقاط المجموعة (نظرًا لأنك تحتاج فقط إلى المباراة بأكملها).

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

نفس بناء جملة الدرس السابق، ولكن باستخدام (?:ab)+ بدلاً من (ab)+.

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

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

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

Find price digits followed optionally by decimal parts inside a non-capturing group, e.g. `100` or `100.50`.

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

استخدم (؟:\\.\\d{2})؟ لجعل الجزء العشري اختياريًا دون التقاطه.

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