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
Pattern: https?:\/\/[\w.-]+(?:\:\d+)?(?:\/[^\s]*)?https?:\/\/-- schema, waarbijsoptioneel is.[\w.-]+-- host (domein, subdomeinen, mogelijklocalhost).(?:\:\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:
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.
Pattern (strict): \b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\bPrecisie 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
Zoek elke http- of https-URL in de tekst. Schema + host + optioneel pad.
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
Vind elke IPv4 (4 decimale bytes gescheiden door punten). Permissieve versie, geen 0-255-controle.
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
Find all IPv4 addresses in the format `X.X.X.X` (composed of four 1-to-3 digit numbers separated by dots).
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