Foros del Web » Programación para mayores de 30 ;) » Programación General »

Consulta Expresion Regular

Estas en el tema de Consulta Expresion Regular en el foro de Programación General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/04/2008, 20:45
 
Fecha de Ingreso: febrero-2007
Mensajes: 33
Antigüedad: 17 años, 8 meses
Puntos: 0
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!.
  #2 (permalink)  
Antiguo 24/04/2008, 01:01
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 11 meses
Puntos: 24
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";
__________________
Grupos de Música
Pop Music Stars
  #3 (permalink)  
Antiguo 05/05/2008, 15:42
 
Fecha de Ingreso: febrero-2007
Mensajes: 33
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Consulta Expresion Regular

Si!, a mi también, muchas gracias!.
  #4 (permalink)  
Antiguo 05/05/2008, 15:50
 
Fecha de Ingreso: febrero-2007
Mensajes: 33
Antigüedad: 17 años, 8 meses
Puntos: 0
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.
  #5 (permalink)  
Antiguo 05/05/2008, 15:56
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
Antigüedad: 16 años, 7 meses
Puntos: 4
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;
  #6 (permalink)  
Antiguo 05/05/2008, 16:16
 
Fecha de Ingreso: febrero-2007
Mensajes: 33
Antigüedad: 17 años, 8 meses
Puntos: 0
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.
  #7 (permalink)  
Antiguo 05/05/2008, 16:31
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
Antigüedad: 16 años, 7 meses
Puntos: 4
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.
  #8 (permalink)  
Antiguo 06/05/2008, 07:37
 
Fecha de Ingreso: febrero-2007
Mensajes: 33
Antigüedad: 17 años, 8 meses
Puntos: 0
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.
  #9 (permalink)  
Antiguo 06/05/2008, 11:59
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
Antigüedad: 16 años, 7 meses
Puntos: 4
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.
  #10 (permalink)  
Antiguo 06/05/2008, 12:54
 
Fecha de Ingreso: febrero-2007
Mensajes: 33
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Consulta Expresion Regular

Pero si en el vector pongo: "COLOR" en lugar de "color", falla nuevamente. Saludos.
  #11 (permalink)  
Antiguo 06/05/2008, 14:42
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 525
Antigüedad: 18 años, 6 meses
Puntos: 11
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:27.