perl | Retroceso en expresiones regulares

En Perl, una expresión regular (también conocida como expresiones regulares o expresiones regulares o RE) es una forma de describir un conjunto de strings sin tener que enumerar todas las strings en su programa o simplemente podemos decir que es una secuencia de caracteres que se utilizan para la coincidencia de patrones . En Perl, las expresiones regulares tienen diferentes usos:

  • En primer lugar, se usan en condicionales para determinar si una string coincide con un patrón en particular.
    Ejemplo: Uso de expresiones regulares en condicionales.

    #!usr/bin/perl
      
    # Regular expressions in Conditionals
    # Program to determine whether a string 
    # matches a particular pattern
    print "How are you feeling today?\n";
    my $stmt = <>;
    print($stmt);
    if ($stmt == /hungry/)
    {
        print "\nWhat would you like to have?\n";
        my $ip = <>;
        print($ip);
    }

    Producción:

    Aquí, la entrada proporcionada por el usuario coincide, si tenemos una palabra «hambriento», es decir, si la condición es verdadera, imprimirá «¿Qué tendrías?» de lo contrario, saltará a la siguiente condición o declaración

  • En segundo lugar, pueden ubicar patrones dentro de una string y reemplazarlos con otra cosa.
    Ejemplo: Operador de sustitución

    #!usr/bin/perl
    # Regular expressions in Substitutions
      
    # Program to determine whether a string 
    # matches a particular pattern and replaces it
    print "What is your thought on life\n";
    my $stmt = <>;
    print ($stmt);
      
    # Substitution using regex
    $stmt =~ s/worst/good/;
    print ("\n$stmt");

    Salida:

    En el código anterior, la sustitución de «bueno» se realiza en lugar de «peor».

  • Finalmente, los patrones pueden especificar no solo dónde está algo, sino también dónde no está. Entonces, el splitoperador usa una expresión regular para especificar dónde no están los datos. Es decir, la expresión regular define los separadores que delimitan los campos de datos.
    Ejemplo: operador de división

    #!usr/bin/perl
      
    # Program to illustrate 
    # the use of split function
    $var1 = "Birth";
    $var2 = "Life";
    $var3 = "Death";
      
    # Using the split function
    my ($var1, $var2, $var3) = split(/, /, "sab, mohmaya, hai");
    print($var1);
    print($var2);
    print($var3);  

    Salida:

    Aquí, en el ejemplo anterior, la función de división coincide con un solo carácter de coma.

retrocediendo

Otra característica importante de la coincidencia de expresiones regulares es el retroceso, que actualmente utilizan (cuando es necesario) todos los cuantificadores de expresiones regulares no posesivas (que se usan para contar el total de todas las coincidencias, en lugar del valor predeterminado de coincidencia solo una vez), a saber, «*», *?, “+”, +?, {n, m} y {n, m}?. El retroceso a menudo se optimiza internamente, pero el principio general descrito aquí es válido (está regresando de una recursión fallida en un árbol de posibilidades). Perl retrocede cuando intenta hacer coincidir patrones con una expresión regular, y sus intentos anteriores no funcionan o simplemente podemos decir que retroceder significa almacenar los patrones coincidentes para uso futuro.
Por ejemplo: /.*?/ podría usarse para hacer coincidir algo similar a una etiqueta HTML como » Negrita”. Esto empuja las dos partes del patrón para que coincidan exactamente con la misma string, en este caso es ‘B’.

Tomemos otro ejemplo,

/^ab*bc*d/

La expresión regular anterior se puede leer como:
1. Comenzando al principio de la string
2. Coincide con una ‘a’.
3. Haga coincidir tantas ‘b’ como sea posible, pero no hacer coincidir ninguna está bien.
4. Haga coincidir tantas ‘c’ como sea posible, pero no hacer coincidir ninguna está bien.
5. Haga coincidir tantas ‘d’ como sea posible, pero no hacer coincidir ninguna está bien.
Partido contra ‘abbbccdddd’.

Aquí podemos ver que estamos retrocediendo al paso 3 porque el paso 4 no es factible, por lo que retrocedemos y encontramos la mejor solución para continuar con el paso 4.

Publicación traducida automáticamente

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