next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Análisis de cadenas con Sup: Expresiones Regulares Ant: El ancla G Err: Si hallas una errata ...


Palabras Repetidas

Su jefe le pide una herramienta que compruebe la aparición de duplicaciones consecutivas en un texto texto (como esta esta y la anterior anterior). La solución debe cumplir las siguientes especificaciones: Esta es la solución:
   1 #!/usr/bin/perl -w
   2 # one <a>one</a>
   3 # is two three
   4 # three
   5 $/ = ".\n";
   6 while (<>) {
   7   next if !s{
   8     \b                 # start word ...
   9     ([a-z]+)           # grab word in $1 and \1
  10     (                  # save the tags and spaces in $2
  11     (\s|<[^>]+>)+      # spaces or HTML tags 
  12     )   
  13     (\1\b)             # repeated word in $4
  14   }
  15   "\e[7m$1\e[m$2\e[7m$4\e[m"igx;
  16   s/^([^\e]*\n)+//mg;  # remove lines that don't contain escapes
  17   s/^/$ARGV: /mg;      # insert filename at the beginning of the lines
  18   print;
  19 }

Normalmente el carácter ^ casa solamente con el comienzo de la cadena y el carácter $ con el final. Los \n empotrados no casan con ^ ni $. El modificador /m modifica esta conducta. De este modo ^ y $ casan con cualquier frontera de línea interna. Las anclas \A y \Z se utilizan entonces para casar con el comienzo y final de la cadena.

Sigue un ejemplo de uso:

> cat double.in
one <a><b>one</b></a>
is two three
 
 
three
.
 
xxxx
>       
> doublee.pl double.in
double.in: one <a><b>one</b></a>
double.in: is two three
double.in: three


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Análisis de cadenas con Sup: Expresiones Regulares Ant: El ancla G Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21