Direct naar de hoofdinhoud
Module 8 · Les 3 van 431/32 in de cursus~12 min
Modulelessen (3/4)

URL's en IP's extraheren

In vrije tekst (logboeken, artikelen, dumps) is het gebruikelijk om URL's te extraheren en IP-adressen. Laten we eens kijken naar robuuste patronen voor beide.

http/https-URL's

Code
Pattern: https?:\/\/[\w.-]+(?:\:\d+)?(?:\/[^\s]*)?
  • https?:\/\/ -- schema, waarbij s optioneel is.
  • [\w.-]+ -- host (domein, subdomeinen, mogelijk localhost).
  • (?:\:\d+)? -- optionele poort.
  • (?:\/[^\s]*)? -- optioneel pad, tot aan de eerste witruimte.

Vangt https://example.com, http://localhost:3000/api/users, BESCHERMD_INLINE_8.

IPv4

Een IPv4 bestaat uit 4 decimale bytes gescheiden door punten:

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

"Goed genoeg" versie: deze accepteert ook ongeldige waarden zoals BESCHERMD_INLINE_9. Voor de strikte versie heb je bereikafwisseling nodig (25[0-5]|2[0-4]\d|[01]?\d\d?), wat veel langer is.

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

Precisie versus beknoptheid

Voor het matchen van URL's of IP's is een evenwichtige patroontolerantie vereist. Een strikte IP-validator verifieert dat geen enkel octet groter is dan 255. Een praktische extractor daarentegen zoekt doorgaans naar vereenvoudigde patronen en delegeert fijne validatie aan speciale code.

Probeer het

Oefening#regex.m8.l3.e1
Pogingen: 0Laden…

Zoek elke http- of https-URL in de tekst. Schema + host + optioneel pad.

Editor laden…
Toon hint

https? voor de optionele s, [\\w.-]+ voor het domein, en een groep (?:\\/[^\\s]*)? voor het optionele pad.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#regex.m8.l3.e2
Pogingen: 0Laden…

Vind elke IPv4 (4 decimale bytes gescheiden door punten). Permissieve versie, geen 0-255-controle.

Editor laden…
Toon hint

Gebruik (?:\\d{1,3}\\.){3} om 'octet + punt' drie keer te herhalen, en vervolgens \\d{1,3} voor de laatste.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#regex.m8.l3.e3
Pogingen: 0Laden…

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

Editor laden…
Toon hint

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

Oplossing beschikbaar na 3 pogingen