دروس الوحدة (3/4)
مجموعات غير ملتقطة: `(؟:...)`
في كثير من الأحيان تكون هناك حاجة للأقواس فقط من أجل التجميع (تحديد كمي، بديل)
وليس لاستخراج القيمة. في هذه الحالة استخدم عدم الالتقاط
الإصدار: (?:...). إنه يعمل بشكل مماثل لـ (...) ولكن لا يُنشئ
مجموعة مرقمة.
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 هي مباشرة
المجال.
لماذا استخدامه
- سهولة القراءة: يفهم القارئ على الفور أن المجموعة موجودة من أجلها فقط هيكل، وليس لاستخراج قيمة.
- الأداء: لا يحتاج المحرك إلى تخزين مباراة المجموعة.
- الترقيم النظيف: تظل المجموعات المرقمة متوافقة معها "المعلومات التي أحتاجها بالفعل"، دون تدخل.
التحسين مع المجموعات غير الملتقطة
يؤدي استخدام (?:...) إلى إخبار المحرك بتطبيق قواعد التجميع والمحدد الكمي دون إضاعة الذاكرة في تخزين نتائج المطابقة المتوسطة. يوصى بهذا بشدة في الحلقات الثقيلة أو معالجة النصوص الطويلة جدًا.
جربه
استخرج النطاق (`example.com`، `test.org`...) من كل عنوان URL في النص. استخدم `(?:https?)` للبروتوكول (لا داعي لالتقاطه) ومجموعة واحدة للمجال.
إظهار التلميح
قم بتغيير المجموعة الأولى من (https?) إلى (?:https?): لا حاجة لالتقاطها، أنت تريد المجال فقط.
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
ابحث عن كل تكرار لـ `ab` كمطابقة واحدة، ولكن دون التقاط المجموعة (نظرًا لأنك تحتاج فقط إلى المباراة بأكملها).
إظهار التلميح
نفس بناء جملة الدرس السابق، ولكن باستخدام (?:ab)+ بدلاً من (ab)+.
الحل متاح بعد 3 من المحاولات
التحدي الإضافي
Find price digits followed optionally by decimal parts inside a non-capturing group, e.g. `100` or `100.50`.
إظهار التلميح
استخدم (؟:\\.\\d{2})؟ لجعل الجزء العشري اختياريًا دون التقاطه.
الحل متاح بعد 3 من المحاولات