miércoles, 28 de abril de 2010

opciones de operdores

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.










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".

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 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.