Przejdź do głównej treści
eLearner.app
Moduł 8 · Lekcja 3 z 431/32 w kursie~12 min
Lekcje modułu (3/4)

Wyodrębnianie adresów URL i IP

W wolnym tekście (logach, artykułach, zrzutach danych) często zachodzi potrzeba wyodrębnienia adresów URL oraz adresów IP. Przyjrzyjmy się solidnym wzorcom dla obu przypadków.

Adresy URL http/https

Code
Pattern: https?:\/\/[\w.-]+(?:\:\d+)?(?:\/[^\s]*)?
  • https?:\/\/ -- schemat, z opcjonalną literą s.
  • [\w.-]+ -- host (domena, poddomeny, ewentualnie localhost).
  • (?:\:\d+)? -- opcjonalny port.
  • (?:\/[^\s]*)? -- opcjonalna ścieżka, do pierwszego białego znaku.

Dopasowuje https://example.com, http://localhost:3000/api/users, https://docs.dev/path/sub.

IPv4

Adres IPv4 składa się z 4 oktetów dziesiętnych rozdzielonych kropkami:

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

Wersja "wystarczająco dobra": akceptuje również nieprawidłowe wartości, takie jak 999.999.999.999. Wersja ścisła wymagałaby alternatywy zakresów (25[0-5]|2[0-4]\d|[01]?\d\d?), która jest znacznie dłuższa.

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

Precyzja a zwięzłość

Dopasowywanie adresów URL lub IP wymaga zbalansowania tolerancji wzorca. Ścisły walidator IP sprawdza, czy żaden oktet nie przekracza 255. Z kolei praktyczny ekstraktor zazwyczaj szuka uproszczonych wzorców i deleguje szczegółową walidację do dedykowanego kodu.

Spróbuj sam

Ćwiczenie#regex.m8.l3.e1
Próby: 0Ładowanie...

Znajdź każdy adres URL http lub https w tekście. Schemat + host + opcjonalna ścieżka.

Ładowanie edytora...
Pokaż wskazówkę

https? dla opcjonalnego s, [\w.-]+ dla domeny oraz grupa (?:\/[^\s]*)? dla opcjonalnej ścieżki.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#regex.m8.l3.e2
Próby: 0Ładowanie...

Znajdź każdy adres IPv4 (4 oktety dziesiętne rozdzielone kropkami). Wersja tolerancyjna, bez sprawdzania zakresu 0-255.

Ładowanie edytora...
Pokaż wskazówkę

Użyj (?:\d{1,3}\.){3}, aby powtórzyć wzorzec 'oktet + kropka' 3 razy, a następnie \d{1,3} dla ostatniego oktetu.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#regex.m8.l3.e3
Próby: 0Ładowanie...

Znajdź wszystkie adresy IPv4 w formacie `X.X.X.X` (składające się z czterech liczb o długości od 1 do 3 cyfr, rozdzielonych kropkami).

Ładowanie edytora...
Pokaż wskazówkę

Użyj \b do wymuszenia granic słów, (?:\d{1,3}\.){3} do powtórzenia oktetu z kropką trzy razy, a na końcu \d{1,3}.

Rozwiązanie dostępne po 3 próbach