Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Ayuda con sustitución en Perl

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Dom May 14, 2006 6:05 pm
tomas_fnm
Perlero Nuevo
Perlero Nuevo
Registrado: 14 May 2006
Mensajes: 5
Ayuda con sustitución en Perl Responder citando

Hola:

Mi duda es con el siguiente código:
Código:
$string = "esto es un\nensayo en perl\nparece q resulta";

print "$string\n\n";

$string =~ s/un\sensayo/una\nprueba/m;
$string =~ s/resulta/funciona/m;

print "$string\n\n";


Según entiendo, cuando ocupo la opción "m" en s/expr1/expr2/ es para que el interpretador no suponga que va a trabajar con líneas simples, sino que con variables multilíneas... pero al probar el código anterior, el resultado es el mismo... con o sin la opción "m"...

Ojalá me puedan guiar un poco...

De antemano gracias Wink
Mensaje Dom May 14, 2006 6:28 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Bienvenido al foro. Está raro tu resultado, pues a mi si me funciona, al ejecutar obtengo el siguiente resultado:

Código:

esto es un
ensayo en perl
parece q resulta

esto es una
prueba en perl
parece q funciona


Saludos
Mensaje Dom May 14, 2006 6:31 pm
tomas_fnm
Perlero Nuevo
Perlero Nuevo
Registrado: 14 May 2006
Mensajes: 5
correccion Responder citando

Código:
$string = "esto es un\nensayo en perl\nparece q resulta";

print "$string\n\n";

$string =~ s/un\nensayo/una\nprueba/m;  #en esta linea decia $string =~ s/un\sensayo/una\nprueba/m;
                                        #el cambio es en "/un\sensayo/" por "/un\nensayo/"
$string =~ s/resulta/funciona/m;

print "$string\n\n";


aunque no es gran diferencia... Wink
Mensaje Dom May 14, 2006 6:36 pm
tomas_fnm
Perlero Nuevo
Perlero Nuevo
Registrado: 14 May 2006
Mensajes: 5
Responder citando

Gracias por la bienvenida... pero mi duda es sobre la opción "m" (porque a mi también me resulta Smile )

La cosa es que el mismo código lo compilé con y sin la opción "m" y arroja el mismo resultado...

Lo necesito para una tarea... un convertidor de html a tex, y como ya debes saber me puedo encontrar con expresiones como
Código:
<h1> texto
</h1>


y creo que s/expr1/expr2/ me puede servir...
Mensaje Lun May 15, 2006 4:15 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

Esto está más descrito en perlre. Aquí va un esbozo:

* El modificador m indica que el texto a analizar es multilínea. Esto quiere decir que los caracteres especiales '^' y '$' dentro de la expresión regular, en vez de coincidir con el comienzo y final de todo el texto, ahora coinciden con el principio y final de cada una de las líneas contenidas en ese texto.

* El modificador s trata a todo el texto como una sola línea (s de 'single'), por lo que entonces el comodín '.' coincide también con los caracteres de final de línea.

El resultado que te sale al principio es el mismo porque '\s' coincide con cualquier "espacio en blanco", y eso también lo es un carácter de fin de línea:
Código:
$texto =       "esto es un\nensayo en perl\nparece q resulta";
$texto =~ s/\s/./g;
print $texto; # esto.es.un.ensayo.en.perl.parece.q.resulta

En resumen, que m te serviría si quisieras incluir dentro de la expresión regular un control sobre la posición del texto a buscar (si está al lado del principio o del final de una línea), pero no para hacer sustituciones simples.

En el caso del HTML que propones, se podría entonces hacer de la misma forma que propones al principio:
Código:
$string = "<h1> texto
</h1>";
$string =~ s/<h1>\s*(.+?)\s*<\/h1>/{$1}/i;
print $string; # {texto}
Fíjate que usamos \s tanto para quitar los espacios en blanco como los retornos de carro.
Mensaje Mar May 16, 2006 4:03 pm
tomas_fnm
Perlero Nuevo
Perlero Nuevo
Registrado: 14 May 2006
Mensajes: 5
Responder citando

gracias por la ayuda Smile
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group