perl | Buscar en un archivo usando expresiones regulares

Requisito previo: Perl | Expresiones regulares

La expresión regular (Regex o Regexp o RE) en Perl es una string de texto especial para describir un patrón de búsqueda dentro de un texto dado. Las expresiones regulares en Perl están vinculadas al lenguaje host y no son las mismas que en PHP, Python, etc. A veces, estas se denominan «Expresiones regulares compatibles con Perl 5». Para usar Regex, se usan operadores vinculantes como (Regex Operator) y (Negated Regex Operator). Estos operadores de expresión regular vinculantes se utilizan para hacer coincidir una string de una expresión regular. El lado izquierdo de la instrucción contendrá una string que coincidirá con el lado derecho que contendrá el patrón especificado. El operador de expresión regular negada verifica si la string no es igual a la expresión regular especificada en el lado derecho. =~ !~

Los operadores Regex ayudan a buscar una palabra específica o un grupo de palabras en un archivo. Esto se puede hacer de varias maneras según los requisitos del usuario. La búsqueda en Perl sigue el formato estándar de abrir primero el archivo en el modo de lectura y luego leer el archivo línea por línea y luego buscar la string o grupo de strings requerido en cada línea. Cuando se encuentra la coincidencia requerida, la declaración que sigue a la expresión de búsqueda determinará cuál es el siguiente paso a hacer con la string coincidente, puede agregarse a cualquier otro archivo especificado por el usuario o simplemente imprimirse en la consola.

Dentro de la expresión regular creada para hacer coincidir la string requerida con el archivo, puede haber varias formas de buscar la string requerida:

Búsqueda habitual:

Este es el patrón básico para escribir una expresión regular que busca la string requerida dentro del archivo especificado. La siguiente es la sintaxis de dicha expresión regular:

$String =~ /the/

Esta expresión buscará las líneas en el archivo que contengan una palabra con las letras ‘ the ‘ y almacenará esa palabra en la variable $String. Además, el valor de esta variable puede copiarse en un archivo o simplemente imprimirse en la consola.

Ejemplo:

use strict;
use warnings;
  
sub main
{
    my $file = 'C:\Users\GeeksForGeeks\GFG.txt';
    open(FH, $file) or die("File $file not found");
      
    while(my $String = <FH>)
    {
        if($String =~ /the/)
        {
            print "$String \n";
        }
    }
    close(FH);
}
main();

Salida:

Como se puede ver, la búsqueda anterior también da como resultado la selección de palabras que tienen ‘the’ como parte de ella. Para evitar tales palabras, la expresión regular se puede cambiar de la siguiente manera:

$String =~ / the /

Al proporcionar espacios antes y después de la palabra requerida que se va a buscar, la palabra buscada se aísla de ambos extremos y no se devuelve ninguna palabra que la contenga como parte de ella en el proceso de búsqueda. Esto resolverá el problema de buscar palabras adicionales que no son necesarias. Sin embargo, esto resultará en la exclusión de las palabras que contienen coma o punto inmediatamente después de la palabra de búsqueda solicitada.
Para evitar tal situación, también hay otras formas que ayudan a limitar la búsqueda a una palabra específica, una de esas formas es usar el límite de palabras.

Usando el límite de la palabra en la búsqueda Regex:

Como se ve en el ejemplo anterior, la búsqueda regular da como resultado que se devuelvan las palabras adicionales que contienen la palabra buscada como parte de ella o que se excluyan algunas de las palabras si se buscan con espacios antes y después de la palabra requerida. Para evitar tal situación, se utiliza el límite de palabras, que se denota con ‘ \b‘.

$String =~ /\bthe\b/;

Esto limitará las palabras que contienen la palabra solicitada para buscar como parte de ella y no excluirá las palabras que terminan con una coma o un punto.

Ejemplo:

use strict;
use warnings;
  
sub main
{
    my $file = 'C:\Users\GeeksForGeeks\GFG.txt';
    open(FH, $file) or die("File $file not found");
      
    while(my $String = <FH>)
    {
        if($String =~ /\bthe\b/)
        {
            print "$String \n";
        }
    }
    close(FH);
}
main();

Salida:

Como se puede ver en el ejemplo anterior, la palabra que termina con punto final se incluye en la búsqueda, pero se excluyen las palabras que contienen las palabras buscadas como parte. Por lo tanto, el límite de palabras puede ayudar a superar el problema creado en el método de búsqueda regular.

¿Qué sucede si hay un caso en el que es necesario encontrar palabras que comiencen, terminen o ambos con caracteres específicos? Entonces eso no se puede hacer con el uso de la búsqueda regular o el límite de palabras. Para casos como estos, Perl permite el uso de comodines en la expresión regular.

Uso de comodines en expresiones regulares:

Perl permite buscar un conjunto específico de palabras o las palabras que siguen un patrón específico en el archivo dado con el uso de comodines en expresiones regulares. Los comodines son ‘puntos’ colocados dentro de la expresión regular junto con la palabra requerida para buscar. Estos comodines permiten que la expresión regular busque todas las palabras relacionadas que siguen el patrón dado y mostrarán lo mismo. Los comodines ayudan a reducir el número de iteraciones involucradas en la búsqueda de varias palabras diferentes que tienen un patrón de letras en común.

$String =~ /t..s/;

El patrón anterior buscará todas las palabras que comienzan con t, terminan con s y tienen dos letras/caracteres entre ellas.

Ejemplo:

use strict;
use warnings;
  
sub main
{
    my $file = 'C:\Users\GeeksForGeeks\GFG.txt';
    open(FH, $file) or die("File $file not found");
      
    while(my $String = <FH>)
    {
        if($String =~ /t..s/)
        {
            print "$String \n";
        }
    }
    close(FH);
}
main();

Salida:

el código anterior contiene todas las palabras especificadas en el patrón dado.

En este método de imprimir las palabras buscadas, se imprime toda la línea que contiene esa palabra, lo que dificulta saber exactamente qué palabra busca el usuario. Para evitar esta confusión, solo podemos imprimir las palabras buscadas y no la oración completa. Esto se hace agrupando el patrón buscado con el uso de paréntesis. Para imprimir esta agrupación de palabras, $numberse utilizan variables.
$number variables son las coincidencias de la última coincidencia exitosa de los grupos de captura que se forman en la expresión regular. por ejemplo, si hay varias agrupaciones en la expresión regular, $1 se imprimirán las palabras que coincidan con la primera agrupación, de manera similar, $2 coincidirán con la segunda agrupación y así sucesivamente.

A continuación se muestra el programa anterior transformado usando las variables $number para mostrar solo las palabras buscadas y no la oración completa:

use strict;
use warnings;
  
sub main
{
    my $file = 'C:\Users\GeeksForGeeks\GFG.txt';
    open(FH, $file) or die("File $file not found");
      
    while(my $String = <FH>)
    {
        if($String =~ /(t..s)/)
        {
            print "$1 \n";
        }
    }
    close(FH);
}
main();

Producción:

Publicación traducida automáticamente

Artículo escrito por Abhinav96 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 *