Lecciones del módulo (3/4)
Extraer URLs e IPs
En texto libre (logs, artículos, volcados de datos) es muy común querer extraer URLs y direcciones IP. Veamos patrones robustos para ambos.
URLs http/https
Pattern: https?:\/\/[\w.-]+(?:\:\d+)?(?:\/[^\s]*)?https?:\/\/-- esquema, con lasopcional.[\w.-]+-- host (dominio, subdominios, posiblementelocalhost).(?:\:\d+)?-- puerto opcional.(?:\/[^\s]*)?-- ruta opcional, hasta el primer espacio en blanco.
Captura https://example.com, http://localhost:3000/api/users, https://docs.dev/path/sub.
IPv4
Una IPv4 consta de 4 octetos decimales separados por puntos:
Pattern: \b(?:\d{1,3}\.){3}\d{1,3}\bVersión "suficientemente buena": también acepta valores inválidos como 999.999.999.999. Para la versión estricta necesitarías una alternancia de rangos (25[0-5]|2[0-4]\d|[01]?\d\d?), que es mucho más larga.
Pattern (estricto): \b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\bPrecisión frente a brevedad
Coincidir con URLs o IPs requiere equilibrar la tolerancia del patrón. Un validador estricto de IP verifica que ningún octeto supere 255. Un extractor práctico, por otro lado, suele buscar patrones simplificados y delega la validación fina a código dedicado.
Pruébalo tú
Encuentra cada URL http o https en el texto. Esquema + host + ruta opcional.
Mostrar pista
https? para la s opcional, [\w.-]+ para el dominio y un grupo (?:\/[^\s]*)? para la ruta opcional.
Solución disponible después de 3 intentos
Ejercicio de repaso
Encuentra cada IPv4 (4 octetos decimales separados por puntos). Versión permisiva, sin comprobación de 0-255.
Mostrar pista
Usa (?:\d{1,3}\.){3} para repetir 'octeto + punto' 3 veces, luego \d{1,3} para el último.
Solución disponible después de 3 intentos
Desafío adicional
Encuentra todas las direcciones IPv4 en formato `X.X.X.X` (compuestas por cuatro números de 1 a 3 dígitos separados por puntos).
Mostrar pista
Usa \b para forzar límites, (?:\d{1,3}\.){3} para repetir el octeto y el punto tres veces, y finalmente \d{1,3}.
Solución disponible después de 3 intentos