SlideShare una empresa de Scribd logo
Programación en perl
 Introducción a expresiones regulares
¿Qué es una expresión
      regular?
Una expresión regular es una plantilla o
patrón que se compara con una cadena de
texto.

El resultado de esta comparación es que la
cadena de texto coincide o no coincide con
ese patrón.

No existe “coincide a medias” o “casi
coincide” o “esta parte sí pero esta otra no”
Ejemplo de uso
1.$_ = "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 $_
Operadores


$string =~ /REGEXP/ -> devuelve verdadero
si la cadena coincide con el patrón

$string !~ /REGEXP/ -> devuelve falso si la
cadena coindice con el patrón
¿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.
Escapado


Si queremos incluir en el patrón alguno de
los caracteres anteriores, hay que escaparlos

  /www.google.com/
Posiciones
b 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
Posiciones
Dada la cadena:

Este es un curso de perl.

¿Qué patrón dará una coincidencia positiva?

  perlb

  perlb$

  perlb.$
()

Se utilizan para agrupar partes de un
patrón.

  /pepe+/ encajaría con pepeeeeeee

  /(pepe)+/ encajaría con pepepepepepe

Cuidado con /(pepe)*/ esto encajaría con
cualquier patrón
()
Los paréntesis permiten reutilizar parte de la cadena coincidente dentro
de 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ón
regular.

Perl los asignará a las referencias 1, 2, 3, etc según su orden de
apertura 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 grupo
usando 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 111

Para esto se utiliza la nueva notación

   /(.)g{1}11/
Alternativa: |


/luis|angel|pepe/ ->encajaría con cualquier
cadena que contuviese luis o angel o pepe.

/Luis (y|o) Miguel/
Clases de caracteres

d números

s espacio, form-feed, tabulador, nueva línea
y retorno de carro.

R (perl 5.10) cualquier tipo de salto de línea
(no tenemos que preocuparnos por el formato
de 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ón
encerrada 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 como
www.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 reemplazar
s/REGEXP/SUSTITUTO/opciones

Opciones:

  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 patrones



Localizar variables en un script perl

  mys+[$@%][a-zA-Z][a-zA-Z_]*b
Ejemplos de patrones
Localizar 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 patrones
Localizar 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 izquierda

ejemplo /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/g

Ejercicio: dado un número 1234123 meter los separadores de miles, es decir,
reescribir el número como 1.234.123
Ejercicios
Utilizando el fichero error.log.1.
Con objeto de enviar este fichero a una lista
de 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---

Más contenido relacionado

PDF
Tema 5 arreglos y cadenas por gio
PDF
PHP mode on
PDF
PHP mode on part 2
PDF
Lenguaje c
PPTX
Compilacion Perl
PDF
Descomposicion funcional parte ii 2013 2
RTF
Repaso c
Tema 5 arreglos y cadenas por gio
PHP mode on
PHP mode on part 2
Lenguaje c
Compilacion Perl
Descomposicion funcional parte ii 2013 2
Repaso c

La actualidad más candente (19)

PPTX
Transformada de Laplace
PDF
Introducción a dr racket
PDF
Programación Funcional con Scheme
DOC
Maple v comandos
PDF
tutorial y Guia de fundamentos drscheme
PDF
PSEUDOCODIGO
PPT
Expresiones regulares edward
DOC
Excel funcionesbasicas-100130150120-phpapp01
PPTX
Juan carlos scrip
DOCX
Ejercicios evaluados i. shearly achji y ricardo ros. estructuras de datos i. ...
PDF
Chuleta de lenguaje C para principiantes
DOCX
Arreglos en c++2020
PDF
Lenguaje de programación c
DOCX
Visual Basic 6.0 Parte 1/2
PDF
Introduccion matlab
PDF
Manual de funciones
PPTX
Funcion si m
PDF
Analisis sintactico10
PPT
Python04
Transformada de Laplace
Introducción a dr racket
Programación Funcional con Scheme
Maple v comandos
tutorial y Guia de fundamentos drscheme
PSEUDOCODIGO
Expresiones regulares edward
Excel funcionesbasicas-100130150120-phpapp01
Juan carlos scrip
Ejercicios evaluados i. shearly achji y ricardo ros. estructuras de datos i. ...
Chuleta de lenguaje C para principiantes
Arreglos en c++2020
Lenguaje de programación c
Visual Basic 6.0 Parte 1/2
Introduccion matlab
Manual de funciones
Funcion si m
Analisis sintactico10
Python04
Publicidad

Destacado (9)

PPTX
Lenguajes regulares
PDF
Expresiones regulares y gramáticas
PPT
(Sin soluiciones) s3 afnd y afd
PDF
Expresiones regulares
PPTX
Expresiones regulares y gramaticas
PPT
Lenguajes Regulares.
PDF
Lenguajes Regulares y Autómatas Finitos - Clase 6
PPTX
Expresiones regulares y gramáticas
PPTX
Clase4: Transformación desde Expresión regular a Autómata finito determinista
Lenguajes regulares
Expresiones regulares y gramáticas
(Sin soluiciones) s3 afnd y afd
Expresiones regulares
Expresiones regulares y gramaticas
Lenguajes Regulares.
Lenguajes Regulares y Autómatas Finitos - Clase 6
Expresiones regulares y gramáticas
Clase4: Transformación desde Expresión regular a Autómata finito determinista
Publicidad

Similar a Perl6 expresiones regulares (20)

PDF
Clase 10 expresiones regulares
PPTX
RegExp JavaScript Expresiones Regulares
DOCX
Contenido científic2 OPERADORES Y REFERENCIAS DE CELDAS
PPTX
Expresiones regulares
DOCX
Aprendiendo php my sql, javascript, css, html5 capitulo 4 expresiones y contr...
PPT
Intro a ruby
PDF
Manual php lec13.validacion_de_formularios
PDF
Tutorial de php
DOCX
Programación con sql
PDF
Perl (practical extraction and report language)
PPT
Kelly
PPTX
Comando grep y expresiones regulares
PDF
Tema 11 expresiones regulares en java por gio
PDF
Java script teoria
PDF
Cheat Sheet: Expresiones regulares para analistas
PPT
PresentacióN 4
ODP
Curso Bash 3
PPT
Arreglos
PPTX
Comando grep y expresiones regulares
PDF
Perl1 escalares
Clase 10 expresiones regulares
RegExp JavaScript Expresiones Regulares
Contenido científic2 OPERADORES Y REFERENCIAS DE CELDAS
Expresiones regulares
Aprendiendo php my sql, javascript, css, html5 capitulo 4 expresiones y contr...
Intro a ruby
Manual php lec13.validacion_de_formularios
Tutorial de php
Programación con sql
Perl (practical extraction and report language)
Kelly
Comando grep y expresiones regulares
Tema 11 expresiones regulares en java por gio
Java script teoria
Cheat Sheet: Expresiones regulares para analistas
PresentacióN 4
Curso Bash 3
Arreglos
Comando grep y expresiones regulares
Perl1 escalares

Más de Alfonso Alba (9)

PDF
Bienvenido a la republica independiente de las pruebas unitarias con Core Data
PPT
Persistencia de datos con Parse
PDF
Usuarios ipad
KEY
PDF
Perl5 hashes
PDF
Perl2 arrays
PDF
Perl3 subrutinas
PDF
Perl4 io
PPT
Plantillajornadasversion2 100708010347-phpapp01
Bienvenido a la republica independiente de las pruebas unitarias con Core Data
Persistencia de datos con Parse
Usuarios ipad
Perl5 hashes
Perl2 arrays
Perl3 subrutinas
Perl4 io
Plantillajornadasversion2 100708010347-phpapp01

Último (20)

PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
DOCX
PLAN DE AREA DE CIENCIAS SOCIALES TODOS LOS GRUPOS
PDF
MATERIAL DIDÁCTICO 2023 SELECCIÓN 1_REFORZAMIENTO 1° BIMESTRE_COM.pdf
DOCX
V UNIDAD - PRIMER GRADO. del mes de agosto
PPTX
Doctrina 1 Soteriologuia y sus diferente
PDF
Aqui No Hay Reglas Hastings-Meyer Ccesa007.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
DOC
Manual de Convivencia 2025 actualizado a las normas vigentes
PDF
TOMO II - LITERATURA.pd plusenmas ultras
PDF
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
PDF
La Formacion Universitaria en Nuevos Escenarios Ccesa007.pdf
PDF
IPERC...................................
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Mi Primer Millon - Poissant - Godefroy Ccesa007.pdf
PDF
1. Intrdoduccion y criterios de seleccion de Farm 2024.pdf
PDF
EL aprendizaje adaptativo bajo STEM+H.pdf
PDF
2.0 Introduccion a processing, y como obtenerlo
PDF
informe tipos de Informatica perfiles profesionales _pdf
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
PLAN DE AREA DE CIENCIAS SOCIALES TODOS LOS GRUPOS
MATERIAL DIDÁCTICO 2023 SELECCIÓN 1_REFORZAMIENTO 1° BIMESTRE_COM.pdf
V UNIDAD - PRIMER GRADO. del mes de agosto
Doctrina 1 Soteriologuia y sus diferente
Aqui No Hay Reglas Hastings-Meyer Ccesa007.pdf
Escuelas Desarmando una mirada subjetiva a la educación
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
Manual de Convivencia 2025 actualizado a las normas vigentes
TOMO II - LITERATURA.pd plusenmas ultras
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
La Formacion Universitaria en Nuevos Escenarios Ccesa007.pdf
IPERC...................................
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Mi Primer Millon - Poissant - Godefroy Ccesa007.pdf
1. Intrdoduccion y criterios de seleccion de Farm 2024.pdf
EL aprendizaje adaptativo bajo STEM+H.pdf
2.0 Introduccion a processing, y como obtenerlo
informe tipos de Informatica perfiles profesionales _pdf

Perl6 expresiones regulares

  • 1. Programación en perl Introducción a expresiones regulares
  • 2. ¿Qué es una expresión regular? Una expresión regular es una plantilla o patrón que se compara con una cadena de texto. El resultado de esta comparación es que la cadena de texto coincide o no coincide con ese patrón. No existe “coincide a medias” o “casi coincide” o “esta parte sí pero esta otra no”
  • 3. Ejemplo de uso 1.$_ = "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 $_
  • 4. Operadores $string =~ /REGEXP/ -> devuelve verdadero si la cadena coincide con el patrón $string !~ /REGEXP/ -> devuelve falso si la cadena coindice con el patrón
  • 5. ¿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
  • 6. 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/
  • 7. . 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]
  • 8. [^ ] [^ ] 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.
  • 9. Escapado Si queremos incluir en el patrón alguno de los caracteres anteriores, hay que escaparlos /www.google.com/
  • 10. Posiciones b 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
  • 11. Posiciones Dada la cadena: Este es un curso de perl. ¿Qué patrón dará una coincidencia positiva? perlb perlb$ perlb.$
  • 12. () Se utilizan para agrupar partes de un patrón. /pepe+/ encajaría con pepeeeeeee /(pepe)+/ encajaría con pepepepepepe Cuidado con /(pepe)*/ esto encajaría con cualquier patrón
  • 13. () Los paréntesis permiten reutilizar parte de la cadena coincidente dentro de 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ón regular. Perl los asignará a las referencias 1, 2, 3, etc según su orden de apertura ignorando la anidación. /(OS ([Xx]) (.+))/ aplicado a la cadena OS X Lion 1 ->OS X Lion 2 -> X 3 -> Lion
  • 14. () A partir de perl 5.10 es posible hacer referencia a un grupo usando 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 111 Para esto se utiliza la nueva notación /(.)g{1}11/
  • 15. Alternativa: | /luis|angel|pepe/ ->encajaría con cualquier cadena que contuviese luis o angel o pepe. /Luis (y|o) Miguel/
  • 16. Clases de caracteres d números s espacio, form-feed, tabulador, nueva línea y retorno de carro. R (perl 5.10) cualquier tipo de salto de línea (no tenemos que preocuparnos por el formato de fichero, sistema operativo, etc) w caracteres [a-zA-Z0-9_]
  • 17. 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
  • 18. Variables especiales $1, $2, $3 -> contienen la parte del patrón encerrada en su respectivo paréntesis $& patrón encontrado $` lo que precedía al patrón encontrado $’ lo que sucede al patrón encontrado
  • 19. Ejercicios ¿qué patrón usarías para localizar una página web como www.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.
  • 20. Buscar y reemplazar s/REGEXP/SUSTITUTO/opciones Opciones: 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
  • 21. Ejemplos de patrones Localizar variables en un script perl mys+[$@%][a-zA-Z][a-zA-Z_]*b
  • 22. Ejemplos de patrones Localizar 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]
  • 23. Ejemplos de patrones Localizar 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
  • 24. “looking around” (?=...) -> mira hacia la derecha (?<= ... ) -> mira hacia la izquierda ejemplo /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/g Ejercicio: dado un número 1234123 meter los separadores de miles, es decir, reescribir el número como 1.234.123
  • 25. Ejercicios Utilizando el fichero error.log.1. Con objeto de enviar este fichero a una lista de 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---

Notas del editor

  • #2: \n
  • #3: \n
  • #4: \n
  • #5: Este operador s&amp;#xF3;lo encuentra la primera ocurrencia del patr&amp;#xF3;n. Luego veremos c&amp;#xF3;mo hacemos para encontrar todas las ocurrencias en la cadena.\n
  • #6: \n
  • #7: \n
  • #8: \n
  • #9: \n
  • #10: \n
  • #11: Aparte de caracteres, los patrones tambi&amp;#xE9;n pueden encontrar posiciones determinadas\n\nver guion posiciones.pl\n
  • #12: ver guion posiciones.pl\n
  • #13: \n
  • #14: \n
  • #15: \n
  • #16: \n
  • #17: \n
  • #18: \n
  • #19: \n
  • #20: \n
  • #21: \n
  • #22: \n
  • #23: \n
  • #24: \n
  • #25: \n
  • #26: \n