Perl6 expresiones regulares
Upcoming SlideShare
Loading in...5
×
 

Perl6 expresiones regulares

on

  • 1,242 views

 

Statistics

Views

Total Views
1,242
Views on SlideShare
1,242
Embed Views
0

Actions

Likes
0
Downloads
7
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • Este operador sólo encuentra la primera ocurrencia del patrón. Luego veremos cómo hacemos para encontrar todas las ocurrencias en la cadena.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Aparte de caracteres, los patrones también pueden encontrar posiciones determinadas\n\nver guion posiciones.pl\n
  • ver guion posiciones.pl\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Perl6 expresiones regulares Perl6 expresiones regulares Presentation Transcript

  • Programación en perl Introducción a expresiones regulares
  • ¿Qué es una expresión regular?Una expresión regular es una plantilla opatrón que se compara con una cadena detexto.El resultado de esta comparación es que lacadena de texto coincide o no coincide conese patrón.No existe “coincide a medias” o “casicoincide” o “esta parte sí pero esta otra no”
  • Ejemplo de uso1.$_ = "yabba dabba doo";2.if (/abba/) {3.  say "¡Coincide!n";4.} En perl, las expresiones regulares forman parte de la propia sintaxis del lenguaje Se evalúa el cuerpo del if si la secuencia ‘abba’ está en la cadena $_ View slide
  • Operadores$string =~ /REGEXP/ -> devuelve verdaderosi la cadena coincide con el patrón$string !~ /REGEXP/ -> devuelve falso si lacadena coindice con el patrón View slide
  • ¿Cómo hay que leer un patrón? El patrón /abba/ no es “la palabra abba”. El motor de expresiones regulares interpreta el patrón como: un caracter a seguido de un caracter b seguido de un caracter b seguido de un caracter a
  • Cuantificadores+ carácter precedente aparece 1 o más veces ejemplo: /a+lfonso/* carácter precedente aparece 0 o más veces ejemplo /a*lfonso/? carácter precedente aparece una o ninguna vez ejemplo /alfon?so/{min,max} número mínimo y máximo de ocurrencias ejemplo /alfons{4,6}o/
  • . y []. cualquier carácter distinto de n ejemplo /a.*lfonso/ ¿qué ocurre si aplicamos el patrón a la siguiente cadena: akksdffonsofonso?[ ]! lista de opciones ejemplo /[aA]lfons[oO]/ Admite rangos [a-z] [A-Z] [0-9] Si queremos incluir el - tenemos que ponerlo al principio [-aeiou]
  • [^ ][^ ] exclusión: /b[^aeiouAEIOU]/ primer carácter de una palabra siempre que este caracter no sea a, e, i, o, u, A, E, I, O, U.
  • EscapadoSi queremos incluir en el patrón alguno delos caracteres anteriores, hay que escaparlos /www.google.com/
  • Posicionesb límite de palabra (espacio, tabuladores, puntos,comas, guiones, principio y fin de línea, etc) /[aA]lfo?nsob/B no debe haber un límite de palabra /Bola/^ principio de cadena$ fin de cadena
  • PosicionesDada la cadena:Este es un curso de perl.¿Qué patrón dará una coincidencia positiva? perlb perlb$ perlb.$
  • ()Se utilizan para agrupar partes de unpatrón. /pepe+/ encajaría con pepeeeeeee /(pepe)+/ encajaría con pepepepepepeCuidado con /(pepe)*/ esto encajaría concualquier patrón
  • ()Los paréntesis permiten reutilizar parte de la cadena coincidente dentrode la propia expresión regular: /(.)1/ encuentra cualquier carácter que vaya seguido de sí mismo.Se pueden poner varios paréntesis dentro de una misma expresiónregular.Perl los asignará a las referencias 1, 2, 3, etc según su orden deapertura ignorando la anidación. /(OS ([Xx]) (.+))/ aplicado a la cadena OS X Lion 1 ->OS X Lion 2 -> X 3 -> Lion
  • ()A partir de perl 5.10 es posible hacer referencia a un grupousando la notación g{N} 1 -> g{1}Supongamos qué tenemos el siguiente patrón: /(.)111/ y la cadena aa11bb Perlo no sabe si estamos diciendo 1 seguido de 11 o 11 seguido de 1 o 111Para esto se utiliza la nueva notación /(.)g{1}11/
  • Alternativa: |/luis|angel|pepe/ ->encajaría con cualquiercadena que contuviese luis o angel o pepe./Luis (y|o) Miguel/
  • Clases de caracteresd númeross espacio, form-feed, tabulador, nueva líneay retorno de carro.R (perl 5.10) cualquier tipo de salto de línea(no tenemos que preocuparnos por el formatode fichero, sistema operativo, etc)w caracteres [a-zA-Z0-9_]
  • Opciones/PATRON/OPCIONES i no diferencia entra mayúsculas y minúsculas /pepe/i coincidiría con Pepe, pepe, PePe, PEPE s hace que . también incluya el salto de línea x hace que se ignoren espacios, tabuladores, comentarios y saltos de línea en la expresión regular: / [0-9]+ # Esto es un comentario [#] # el caracter “#” /x
  • Variables especiales$1, $2, $3 -> contienen la parte del patrónencerrada en su respectivo paréntesis$& patrón encontrado$` lo que precedía al patrón encontrado$’ lo que sucede al patrón encontrado
  • Ejercicios¿qué patrón usarías para localizar una página web comowww.protrainning.com, mail.yahoo.com, etc?Utilizando el fichero last.txt: calcular todas las veces que se ha reiniciado el ordenador en el mes de noviembre evaluar las veces que Alfonso ha entrado más tarde de las 8 y si supera las 5 veces, avisar de que es un vago. Calcular la hora mínima y máxima a la que root ha accedido y el tiempo que ha estado activo.
  • Buscar y reemplazars/REGEXP/SUSTITUTO/opcionesOpciones: i !ignora mayúsculas y minúsculas g!busca y sustituye todas las ocurrencias e!considera SUSTITUTO una expresión y la evalúa s/d{3,8}/9*9/e -> sustituye 456 por 81
  • Ejemplos de patronesLocalizar variables en un script perl mys+[$@%][a-zA-Z][a-zA-Z_]*b
  • Ejemplos de patronesLocalizar una IP: Es importante saber qué buscamos para definir nuestra expresión regular ¿nos vale este patrón d{1,3}.d{1,3}.d{1,3}.d{1,3} Depende, ya que este patrón encuentra 999.999.999.999 que no es una IP válida Podemos capturar cada número en $1, $2, $3, $4 y validarlo a posteriori Podemos utilizar este patrón [01]?d?d|2[0-4]d|25[0-5] . [01]?d?d|2[0-4]d|25[0-5] . [01]?d?d|2[0-4]d|25[0-5] . [01]?d?d|2[0-4]d|25[0-5]
  • Ejemplos de patronesLocalizar números en coma flotante primer intento:! [-+]?[0-9]*.?[0-9]*MALO: ENCAJA CON CUALQUIER CADENA YA QUE TODOS LOS CARACTERES SON OPCIONALES segundo intento:: lo que es opcional es el decimal y los números siguientes, debe haber al menos un número [-+]?[0-9]+(.[0-9]*)? tercer intento: falta que encuentre números como .0098 lo hacemos utilizando un or [-+]?[0-9]+(.[0-9]*)?|[-+]?(.[0-9]+) Sigue sin funcionar ya que va a encontrar, por ejemplo 123.1234.1234 Si esta expresión regular es buena o no dependerá del contexto Cuarto intento s[-+]?[0-9]+(.[0-9]*)?|[-+]?(.[0-9]+)s
  • “looking around”(?=...) -> mira hacia la derecha(?<= ... ) -> mira hacia la izquierdaejemplo /alf(?=onso)/ -> sólo encuentra la cadena “alf” si esta va seguida de “onso”Estos operadores no consumen texto ejemplo /(alf(?=onso)|onso)/ Sirven para encontrar posiciones: Supongamos que tenemos un texto en el que hay muchos “alfono” en lugar de alfonso. Podríamos utilizar la siguiente expresión para corregir el error: s/(?<=alfon)(?=ob)/s/gEjercicio: dado un número 1234123 meter los separadores de miles, es decir,reescribir el número como 1.234.123
  • EjerciciosUtilizando el fichero error.log.1.Con objeto de enviar este fichero a una listade correo pública, se desea lo siguiente: Sustituir las direcciones IP por XXX.XXX.XXX.XXX Sustituir las versiones de los programas Apache, mod_jk, mod_ssl y open_ssl ! por la cadena ---obfuscated for security---