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

استخراج عناوين URL وعناوين IP

في النص الحر (السجلات والمقالات والمقالب) من الشائع الرغبة في استخراج عناوين URL و عناوين IP. دعونا نلقي نظرة على الأنماط القوية لكليهما.

عناوين URL http/https

Code
Pattern: https?:\/\/[\w.-]+(?:\:\d+)?(?:\/[^\s]*)?
  • https?:\/\/ -- المخطط، مع s اختياري.
  • [\w.-]+ -- المضيف (المجال، النطاقات الفرعية، ربما localhost).
  • (?:\:\d+)? - منفذ اختياري.
  • (?:\/[^\s]*)? -- مسار اختياري، حتى المسافة البيضاء الأولى.

يلتقط https://example.com، http://localhost:3000/api/users، محمي_INLINE_8.

IPv4

يتكون IPv4 من 4 ثمانيات عشرية مفصولة بنقاط:

Code
Pattern: \b(?:\d{1,3}\.){3}\d{1,3}\b

إصدار "جيد بما فيه الكفاية": يقبل أيضًا قيمًا غير صالحة مثل محمي_INLINE_9. بالنسبة للإصدار الصارم، ستحتاج إلى تغيير النطاق (25[0-5]|2[0-4]\d|[01]?\d\d?)، وهو أطول بكثير.

Code
Pattern (strict): \b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b

الدقة مقابل الإيجاز

تتطلب مطابقة عناوين URL أو عناوين IP موازنة التسامح مع الأنماط. يتحقق مدقق IP الصارم من عدم تجاوز أي ثماني بتات لـ 255. ومن ناحية أخرى، يبحث المستخرج العملي عادةً عن أنماط مبسطة ويفوض التحقق الدقيق إلى كود مخصص.

جربه

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

ابحث عن كل عنوان URL http أو https في النص. المخطط + المضيف + المسار الاختياري.

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

https؟ بالنسبة إلى s الاختيارية، [\\w.-]+ للمجال، والمجموعة (?:\\/[^\\s]*)؟ للمسار الاختياري.

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

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

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

ابحث عن كل IPv4 (4 ثمانيات عشرية مفصولة بالنقاط). إصدار مسموح به، لا يوجد فحص 0-255.

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

استخدم (?:\\d{1,3}\\.){3} لتكرار 'octet + dot' 3 مرات، ثم \\d{1,3} للمرة الأخيرة.

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

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

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

Find all IPv4 addresses in the format `X.X.X.X` (composed of four 1-to-3 digit numbers separated by dots).

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

Use \b to enforce boundaries, (?:\d{1,3}\.){3} to repeat the octet and dot three times, and finally \d{1,3}.

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