Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Programación General (http://www.forosdelweb.com/f14/)
-   -   Consulta Expresion Regular (http://www.forosdelweb.com/f14/consulta-expresion-regular-579350/)

Agus211 23/04/2008 20:45

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!.

aloqui 24/04/2008 01:01

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";


Agus211 05/05/2008 15:42

Re: Consulta Expresion Regular
 
Si!, a mi también, muchas gracias!.

Agus211 05/05/2008 15:50

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.

a2a2 05/05/2008 15:56

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;

Agus211 05/05/2008 16:16

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.

a2a2 05/05/2008 16:31

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.

Agus211 06/05/2008 07:37

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.

a2a2 06/05/2008 11:59

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.

Agus211 06/05/2008 12:54

Re: Consulta Expresion Regular
 
Pero si en el vector pongo: "COLOR" en lugar de "color", falla nuevamente. Saludos.

jferrero 06/05/2008 14:42

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.


La zona horaria es GMT -6. Ahora son las 23:05.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.