Dom May 14, 2006 6:05 pm
|
 |
tomas_fnm
Perlero Nuevo

|
Registrado: 14 May 2006
Mensajes: 5
|
|
| Ayuda con sustitución en Perl |
|
|
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  |
|
|
|
Dom May 14, 2006 6:28 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
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 |
|
Dom May 14, 2006 6:31 pm
|
 |
tomas_fnm
Perlero Nuevo

|
Registrado: 14 May 2006
Mensajes: 5
|
|
| correccion |
|
|
| 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...  |
|
Dom May 14, 2006 6:36 pm
|
 |
tomas_fnm
Perlero Nuevo

|
Registrado: 14 May 2006
Mensajes: 5
|
|
|
|
|
Gracias por la bienvenida... pero mi duda es sobre la opción "m" (porque a mi también me resulta )
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
y creo que s/expr1/expr2/ me puede servir... |
|

Lun May 15, 2006 4:15 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4090
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Mar May 16, 2006 4:03 pm
|
 |
tomas_fnm
Perlero Nuevo

|
Registrado: 14 May 2006
Mensajes: 5
|
|
|
|
|
gracias por la ayuda  |
|
Powered by phpBB © 2001, 2005 phpBB Group
|