perl | Extraiga la dirección IP de una string usando Regex

Perl significa Lenguaje Práctico de Extracción e Informes y este es un acrónimo no autorizado. Una de las características más poderosas del lenguaje de programación Perl es la expresión regular y en este artículo aprenderá cómo extraer una dirección IP de una string. Una expresión regular puede ser simple o compleja, según el patrón que desee hacer coincidir, como nuestro título: Extracción de la dirección IP de una string mediante Regex. Extraer la dirección IP de una string puede ser una tarea simple o desafiante. Por lo tanto, la gente ama y odia las expresiones regulares. Son una excelente manera de expresar un patrón simple y una manera horrible de expresar patrones complicados. Algunos de los ejemplos de Cuantificadores, así como Caracteres y su significado se dan a continuación:

cuantificador Sentido
a* cero o más a
un+ una o más a
¿a? cero o una a
soy} exactamente ma’s
soy,} al menos ma’s
un {m, n} al menos m pero como máximo n a’s
Personaje Sentido
^ principio de string
ps final de string
. cualquier carácter excepto nueva línea
* coincidir 0 o más veces
+ coincidir 1 o más veces
? coincidir 0 o 1 veces
| alternativa
( ) agrupamiento
[ ] juego de caracteres
{ } modificador de repetición
\ cotización o especial

Extraer una dirección IP de una string

La forma más fácil es simplemente tomar cualquier string de cuatro números decimales separados por puntos es

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/ OR /^\d+\.\d+\.\d+\.\d+$/

En el siguiente ejemplo, simplemente extraemos una dirección IP de una string dada.

#!/usr/bin/perl
  
my $ip = "MY IP ADDRESS IS172.26.39.41THIS IS A VALID IP ADDRESS";
  
if($ip =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/)
{
    $ip = $1;
    print "$ip\n";
}

Producción:

Pero, el ejemplo anterior también acepta la dirección IP incorrecta como 596.368.258.269. Sabemos que una dirección IP adecuada con puntos decimales no tiene un valor superior a 255 y escribir una expresión regular que coincida con los números enteros de 0 a 255 es un trabajo duro ya que las expresiones regulares no entienden la aritmética; operan puramente textualmente. Por lo tanto, debe describir los números enteros del 0 al 255 de forma puramente textual.

Ahora, veremos una implementación de extracción de una dirección IP que también verificará el rango de octetos.

#!/usr/bin/perl
  
my $ip = "MY IP ADDRESS IS 36.59.63 THIS IS A VALID IP ADDRESS";
  
if($ip =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/)
{
    if($1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255)
    {
        print("Each octet of an IP address ",
              "is within the range - $1\n");
        print("\nIP address accepted!\n");
    }
    else
    {
        print("Octet not in range - $1\n",
              "IP address not accepted\n");
    }
}
else
{
    print("Valid IP address not found in a given string\n");
}

Producción:

Si cambia la string a

[my $ip = "MY IP ADDRESS IS 127.36.59.63 THIS IS A VALID IP ADDRESS";] 

entonces la salida es

En el siguiente ejemplo, aceptamos una string del usuario que contiene una dirección IP y luego extraemos la dirección IP de ella. Usamos la función chomp() para eliminar cualquier carácter de nueva línea del final de una string.

#!/usr/bin/perl
  
print("Enter the IP Address you would like to validate - ");
my $ip = <STDIN>;
  
if($ip =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/)
{
    $ip = $1;
}
  
chomp($ip);
  
if($ip =~ m/^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)$/)
{
    print("\nIP address found - $ip\n");
    if($1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255)
    {
        print("Each octet of an IP address is ",
              "within the range - $1.$2.$3.$4\n");
        print("\n-> $ip IP address accepted!\n");
    }
    else
    {
        print("Octet(s) out of range. ",
              "Valid number range between 0-255\n");
    }
}
else
{
    print("IP Address $ip is not in a valid format\n");
}

Producción:

Publicación traducida automáticamente

Artículo escrito por support3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *