perl | Modificador ‘e’ en expresión regular

En Perl, la expresión regular permite realizar varias operaciones en una string determinada con el uso de operadores adecuados. Estos operadores pueden realizar operaciones como modificación de string, sustitución de otras substrings, etc. La sustitución de una substring en la string dada se realiza con el uso del operador ‘s’ (sustitución), que toma dos operandos, uno es la substring que se va a reemplazado y el otro es la string de reemplazo.

s/To_be_replaced/Replacement/

Además, si es necesario sustituir la substring con una string de reemplazo que es una expresión regular para ser evaluada, se usa el modificador ‘ e ‘. El modificador ‘e’ se coloca al final de la expresión de sustitución.

s/To_be_replaced/Regular_Expression/e;

El modificador ‘e’ también se puede usar con el modificador ‘g’ (globalmente) para realizar los cambios en todas las substrings posibles en la string dada.

Ejemplo 1: uso de la clase de caracteres para la sustitución

#!/usr/bin/perl
  
# Defining the string to be converted
$String = "Geeks for Geeks is the best";
print "Original String: $String\n";
  
# Converting the string to UPPERCASE
# using 'uc' Function
$String =~ s/(\w+)/uc($1)/ge;
print"Uppercased String: $String\n";
  
# Converting the string to lowercase
# using 'lc' Function
$String =~ s/(\w+)/lc($1)/ge;
print"Lowercased String: $String\n";
Producción:

Original String: Geeks for Geeks is the best
Uppercased String: GEEKS FOR GEEKS IS THE BEST
Lowercased String: geeks for geeks is the best

El código anterior usa una clase de caracteres ‘\w’ que contiene el alfabeto en minúsculas y mayúsculas junto con todos los dígitos (az|A_Z|0-9). Esto se usa para realizar una sola operación de sustitución en toda la string.

Ejemplo 2: usar un solo carácter o una palabra para una sustitución específica

#!/usr/bin/perl
  
# Defining the string to be converted
$String = "Geeks for Geeks is the best";
print "Original String: $String\n";
  
# Converting a single character using e modifier
$String =~ s/(e)/uc($1)/ge;
print"Updated String: $String\n";
  
# Converting a word using e modifier
$String =~ s/(for)/uc($1)/ge;
print"Updated String: $String\n";
Producción:

Original String: Geeks for Geeks is the best
Updated String: GEEks for GEEks is thE bEst
Updated String: GEEks FOR GEEks is thE bEst

En el código anterior, se puede ver que la string después de la actualización no volverá a su versión original, incluso después de aplicarle la segunda recursión.

Uso de una subrutina para la operación de sustitución: la operación
de sustitución en expresiones regulares de Perl también se puede realizar con el uso de subrutinas para evitar la redundancia de escribir la expresión regular de sustitución una y otra vez para cada string. Esto se puede hacer colocando el código regex en la subrutina y llamándolo donde sea necesario.

Ejemplo:

#!/usr/bin/perl
  
# Subroutine for substitution operation
sub subroutine
{
    $regex = shift;
    $regex =~ s/Friday/Tuesday/;
    return $regex;
}
  
# Defining the string to be converted
$String = "Monday Friday Wednesday";
print "Original String: $String\n";
  
# Calling the subroutine for substitution
$String =~ s/(\w+)/subroutine($1)/ge;
print"Updated String: $String\n";
  
  
# Defining a new String to be converted
$String2 = "Today is Friday";
print "\nOriginal String: $String2\n";
  
# Calling the subroutine for substitution
$String2 =~ s/(\w+)/subroutine($1)/ge;
print"Updated String: $String2\n";
Producción:

Original String: Monday Friday Wednesday
Updated String: Monday Tuesday Wednesday

Original String: Today is Friday
Updated String: Today is Tuesday

En el código anterior, cuando comienza la operación de sustitución, llama a la subrutina ‘change_substitution’ que contiene el código regex para reemplazar la substring que coincide con la búsqueda.

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 *