Introducción
Todos los programadores de perl han usado las expresiones regulares en algun momento, ya sea para verificar si alguna variable tiene un valor deseado, o para sustituir una palabra por otra. Pero aún así son contados los programadores que REALMENTE entiendes en su máxima extensión est gran creación: las expresiones regulares.
Las expresiones regulares existen en todos los lenguajes de programación desde JAVA,c y C++ hasta el PHP,Phyton y Perl. En todos la sintaxis son muy similares exceptuando ciertos cambios en algunos caracteres.
En este tutorial vamos a ver un poco de las expresiones regulares y lo que podemos lograr con ellas, este es una breve introducción a este mundo.
Demilitador de las expresiones
Un delimitador es lo que marca el principio y el fin de una expresion regular. El delimitador que más comunmente se usa es la diagonal '/':
m//;
Sin embargo este delimitador lo podemos cambiar por el que se nos pegue la gana, ya sea por una letra o algun otro símbolo:
#Delimitador !
m!expresion!;
#Delimitador =
m=expresion=;
#Delimitador -
m-expresion-;
La regla es sumamente sencilla, debes de usar el mismo delimitador para abrir y cerrar la expresión regular, y este debe de ser de un sólo caractér.
NOTA: A veces el uso de caracteres delimitadores como el + pueden hacer que tu código se difícil de leer.
El operador m//
Este operador también conocido como de cotejo, se utiliza para localizar alguna expresión dentro de una cadena de texto o string. Si la expresión es verdadera entonces se regresará un 1.
Normalmente este operador es utilizado para verificar que nuestra variable tenga cierto valor. Por ejemplo:
my $string = "Mi frase no muy larga";
if($string =~ m/frase/){
print "Se encontró la palabra: frase.\n";
}
Al ver este pequeño pedazo de código verás un símbolo extraño "=~". Este símbolo le dice a perl que evalue la siguiente expresión regular a verdadero, lo que significa que si el operador regresa un valor de 1 o verdadero se imprimirá el texto dentro del "if".
Pero que pasa si quisieramos hacerlo al revés, si quisieramos checar que alguna expresión NO estuviera dentro de alguna cadena:
my $string = "Mi frase no muy larga";
if($string !~ m/jugo/){
print "No se encontró la palabra: jugo.\n";
}
Aquí vemos como debido a que NO se encontró la palabra "jugo" el código dentro del "if" es ejecutado.
El operador s///
Este operador que tambiés es conocido como operador de sustitución, es utilizado para sustituir alguna cadena o expresión por otra. Por ejemplo:
my $string = "Hoy es Lunes";
$string =~ s/Lunes/Martes/;
Al correr la siguiente expresión el valor final de "$string" será de: "Hoy es Martes".
La sintáxis de este operador, es que primero va la cadena o expresión que queremos que sea sustituido seguido por lo que queremos sustituirlo con.
Otro ejemplo de esto es:
$string = "El nombre de mi perro es: (nombre)";
$string =~ s/\(nombre\)/Rocky/;
Si corres esta expresión te imaginaras que el resultado va a ser: "El nombre de mi perro es: Rocky".
El operador tr///
También conocidmo como el operador de traducción nos sirve para cambiar carácteres individuales por otros. La diferencia que tienes con los otros operadores, es que este no lee variables dentro de la expresión.
my $string = "aparato";
$string =~ tr/a/e/;
Al ejecutar este expresión el resultado va a ser: "eperete".
Opciones de los operadores
Si alguna ves has visto expresiones regulares anteriormente, quizá te habrás dado cuenta que al final de ellas luego hay letras. Estas letras son "opciones" que le indica a perl como interpretar la expresión.
Hay varias opciones que se pueden usar, pero como esto es sólo una introducción sólo voy a poner las más usuales:
Opcion: i Este operador le dice a perl que ignore el uso de mayúscula y minúsculas. Por ejemplo:
my $string = "Palabra";
#La siguiente expresión da falso debido a que hay una mayúscula
print "Verdadero" if $string =~ m/palabra/;
#La siguiente expresión da verdadero debido a que le decimos a perl que no nos importan las mayúsculas
print "Verdadero" if $string =~ m/palabra/i;
Opción: g
Esta opción le dice a perl que repita la sustitución durante todas las ocurrencias de la cadena. Por ejemplo:
my $string = "Lunes y otro Lunes";
#Solo hará el remplazo al primer Lunes
$string =~ s/Lunes/Martes/;
#Hará el remplazo al todos los Lunes
$string =~ s/Lunes/Martes/g;
Opción: m
Este opción le dice a perl que la cadena que se esta evaluando es de varias lineas. Para dar más velocidad al proceso, perl hace una optimización como si estuviera evaluando una sola linea. Así que si tu cadena tiene varios "\n", tienes que usar esta opcion para quitar esta optimización.
Meta-Secuencias
Dentro de nuestras expresiones podemos usar lo que se llaman "Meta-Secuencia", estos son caracteres que simbolizan cosas específicas y aquí esta una lista de las más usadas.
Meta: \b
Esta meta-secuencia se usa para marcar un fin de palabra. Por ejemplo:
$string = "Mi palabara es esta.";
#Debido a que en esta expresión se usar el fin de palabra el resultado es verdadero por "es" y no por "esta".
print "OK" if $string =~ "\bes\b";
Meta: \B
El contrario de la meta-secuencia anterior, esto simboliza un fin de no-palabra.
Meta: \d
Cualquier dígito (0-9). Por ejemplo:
my $string = "Numeros 12345";
print "Hay números." if $string =~ m/\d/;
Meta: \D
Simboliza cualquier no-digito.
Meta: \s
Cualquier espacio en blanco. Por ejemplo:
my $string = "Mis palabras";
#Quitamos todos los espacios en blanco
$string =~ s/\s//g;
Meta: \S
Cualquier no-espacio.
Meta: \t
Cualquier tabulador.
Meta: \u
Cambia el siguiente carácter a mayúscula.
Meta: \U
Cambia los carácteres que siguen a mayúscula hasta encontrar un \E.
Meta: \l
Cambia el caracter que sigue por minúscula.
Meta: \L
Cambia los caracteres siguientes a minúsculas hasta encontrar un \E.
Meta: \w
Meta-secuencia para todos los caracteres de palabra, es decir todos los caracteres alfa-númericos y el guíon. Por ejemplo:
$string = '$%&·';
print "No hay palabras" if $string !~ m/\w/;
Meta: \W
Todos los caracteres de no-palabra.
Notas Finales
Con este tutorial ya hechamos un vistazo muy amplio al mundo de las expresiones regulares, aunque aún faltan varios temas para poder manejar totalmente las expresiones regulares, pero ya será tema de otro tutorial.
Más Información
Si deseas aprender más a fondo todo acerca de las expresiones regulares, te recomiendo los siguientes libros: