Retroceder   Foros del Web > Programación para sitios web > Perl y CGI

Respuesta
 
Herramientas Desplegado
Antiguo 23-abr-2008, 20:45   #1 (permalink)
Agus211 ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 32
Consulta Expresion Regular

Hola, quería saber si alguien me puede ayudar con la siguiente duda:

Tengo un string el cual puede ser por ejemplo: "la casa del casamiento es linda. La CASA se ve de lejos".

Ando necesitando reemplazar el término(aunque aparezca en mayúsculas o minúsculas) "casa" por "xxxx". Es decir, la expresión debería quedar: "la xxxx del xxxxmiento es linda. La xxxx se ve de lejos".

Logré reemplazar "casa", pero al querer reemplazar las otras 2 apariciones, me falla o bien cambia por ejemplo "casamiento" por "xxxx".

Me podrían ayudar?.

Gracias!.
Agus211 está desconectado   Responder Citando
Antiguo 24-abr-2008, 01:01   #2 (permalink)
aloqui tiene algunos puntos positivos de karma
 
Avatar de aloqui
 
Fecha de Ingreso: diciembre-2007
Mensajes: 970
Re: Consulta Expresion Regular

Prueba con ésto, a mí me ha funcionado:
Código:
#!/usr/bin/perl
use strict;
my $frase = "la casa del casamiento es linda. La CASA se ve de lejos";
$frase =~ s/casa/xxxx/gi;
print "frase='$frase'\n";
aloqui está desconectado   Responder Citando
Antiguo 05-may-2008, 15:42   #3 (permalink)
Agus211 ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 32
Re: Consulta Expresion Regular

Si!, a mi también, muchas gracias!.
Agus211 está desconectado   Responder Citando
Antiguo 05-may-2008, 15:50   #4 (permalink)
Agus211 ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 32
Re: Consulta Expresion Regular

Disculpen, nueva consulta...

Por que no es posible hacer lo siguiente?:

Supongamos que:

$busca = 'CASA';
$param = 'LA CASA DEL ARBOL ESTA MANCHADA DE PINTURA';

$param =~ s/$busca/\$\{busca\}/gi;

$busca = 'CAJA';

print $param;

Cuando imprimo, en lugar de mostrarme: "LA CAJA DEL ARBOL ESTA MANCHADA DE PINTURA", me muestra el cambio literal de la expresion: "LA ${busca} DEL ARBOL ESTA MANCHADA DE PINTURA".

Se puede lograr esta funcionalidad con expresiones regulares?.

Saludos y perdon por las molestias.
Agus211 está desconectado   Responder Citando
Antiguo 05-may-2008, 15:56   #5 (permalink)
a2a2 tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
Re: Consulta Expresion Regular

Te sustituye "${busca}" en el resultado porque le has puesto una barra invertida delante del $.

¿ Que quieres hacer ¿ Cambiar CASA por CAJA, usando variables ? En ese caso creo que es:
$origen = 'CASA';
$destino = 'CAJA';
$frase = 'LA CASA DEL ARBOL ESTA MANCHADA DE PINTURA';
$frase =~ s/$origen/$destino/gi;
a2a2 está desconectado   Responder Citando
Antiguo 05-may-2008, 16:16   #6 (permalink)
Agus211 ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 32
Re: Consulta Expresion Regular

Hola, nono, ese no sería el caso. Lo que me sucede en concreto es lo siguiente:

Yo tengo un array con por ejemplo 2 elementos:

@v = ['casa','color'];
$frase = 'La casa de color azul';

y cuando lo recorro, hago el siguiente reemplazo:

foreach $param (@v) {
$frase =~ s/$param/<FONT COLOR="red">${param}<\/FONT>/gi;
}

El problema que me surgió, es que al tomar $param el valor 'color', me queda mal formada la frase, es decir:

Al ser $param = 'casa' se hace lo siguiente:
"La <FONT COLOR="red">casa</FONT> de color azul"

Al pasar a ser 'color', me cambia de mas:

"La <FONT <FONT COLOR="red">="red">casa</FONT> de <FONT COLOR="red">color<FONT COLOR="red"> azul"

De esta manera, me rompe el tag de fuente que puse.
Agus211 está desconectado   Responder Citando
Antiguo 05-may-2008, 16:31   #7 (permalink)
a2a2 tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
Re: Consulta Expresion Regular

Ah, ahora entiendo.
Pues en este caso tienes suerte y es facil corregirlo ya que en un caso es en mayusculas y en otro en minusculas. Sólo tienes que quitar el modificador "i" (ignore case) que hay al final de la expresión regular. Otros casos pueden no ser tan fáciles y necesitas modificar la expresión regular, añadiendo espacios u otras cosas.
a2a2 está desconectado   Responder Citando
Antiguo 06-may-2008, 07:37   #8 (permalink)
Agus211 ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 32
Re: Consulta Expresion Regular

Hola, gracias por la ayuda, entonces si quiero que cambie cuando es en mayusculas como minusculas debo hacer 2 expresiones regulares?. Saludos.
Agus211 está desconectado   Responder Citando
Antiguo 06-may-2008, 11:59   #9 (permalink)
a2a2 tiene algunos puntos positivos de karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
Re: Consulta Expresion Regular

A ver, si incluyes el modificador "i" (al final de la expresión regular) le indicas que considere igual mayúsculas y minúsculas. Si no incluyes dicho modificador, las mayusculas y las minúsculas las considerará letras diferentes.
a2a2 está desconectado   Responder Citando
Antiguo 06-may-2008, 12:54   #10 (permalink)
Agus211 ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 32
Re: Consulta Expresion Regular

Pero si en el vector pongo: "COLOR" en lugar de "color", falla nuevamente. Saludos.
Agus211 está desconectado   Responder Citando
Antiguo 06-may-2008, 14:42   #11 (permalink)
Colaborador
jferrero está en el buen camino
 
Avatar de jferrero
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 336
Re: Consulta Expresion Regular

Código:
#!/usr/bin/perl
use warnings;
use strict;

my @v = ('casa','color');
my $frase = "La casa de color azul\n";

for my $param ( @v ) {
    $frase =~ s/$param/<FONT COLOR="red">$param<\/FONT>/;
}

print $frase;
El problema está en la definición del array @v. Estabas usando corchetes, con lo que realmente estabas definiendo un array anónimo con dos elementos, con lo que @v contenía un solo elemento: una referencia a ese array.
jferrero está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 06:40.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93