Opción 1:IPv4 simple (bueno para verificaciones rápidas y sucias)
Este Regex funciona bien para las direcciones IPv4 más comunes, pero puede perderse algunos casos de borde (como direcciones con ceros líderes en octetos):
`` `regex
\ b (?:\ d {1,3} \.) {3} \ d {1,3} \ b
`` `` ``
* `\ B`:límite de palabras para evitar coincidencias parciales (por ejemplo, coincidir" 192.168.1.100 "dentro de" 192.168.1.1000 ").
* `(?:\ D {1,3} \.)`:Grupo no capturante que coincide de uno a tres dígitos seguido de un punto (repetido tres veces).
* `\ D {1,3}`:de uno a tres dígitos para el último octeto.
Opción 2:IPv4 un poco más robusta
Esta versión agrega alguna validación para evitar números superiores a 255:
`` `regex
\ B (? :(?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \.) {3} (?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \ B
`` `` ``
* `(?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?)`:Esto coincide con los números de 0 a 255. Maneja las diferentes posibilidades:
* `25 [0-5]`:Números de 250 a 255.
* `2 [0-4] [0-9]`:Números de 200 a 249.
* `[01]? [0-9] [0-9]?`:Números de 0 a 199 (liderazgo opcional 0 o 1).
Opción 3:IPv4 e IPv6 (muy complejo)
Una regex que maneja con precisión * las direcciones * IPv4 e IPv6 es significativamente más complicado. Generalmente se recomienda utilizar bibliotecas de análisis de direcciones IP dedicadas en lugar de depender únicamente de Regex para esta tarea. Sin embargo, si debe usar un Regex, prepárate para una expresión larga y difícil de manejar. Encontrará ejemplos en línea, pero no son fácilmente legibles o mantenibles.
Recomendación:
Para la mayoría del análisis de archivos de registro, Opción 2 Proporciona un buen equilibrio entre precisión y simplicidad. Si necesita manejar las direcciones IPv6, use una biblioteca de análisis de direcciones IP dedicada en su lenguaje de programación (el módulo `ipaddress` de Python es un buen ejemplo). Las expresiones regulares no son la herramienta ideal para esta tarea compleja.
Uso de ejemplo (Python):
`` `Python
importar
log_line ="192.168.1.100 - - [10/oct/2023:13:55:36 +0000] \" get/http/1.1 \ "200 1024"
patrón =r "\ b (? :(?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \.) {3} (?:25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \ B"
Match =re.search (patrón, log_line)
Si el partido:
ip_address =match.group (0)
print (f "dirección IP encontrada:{ip_address}")
`` `` ``
Recuerde adaptar el Regex y el código a su formato de archivo de registro específico y lenguaje de programación.