Duda PHP Expresiones Regulares

EnZo

Tengo:


$text = "<color=#005500>texto</color>";
$text = eregi_replace("(<color=)(.*)(>)","<font color='\2'>",$text);
$text = str_replace("</color>","</font>",$text);
print $text;

Que fallo tiene?
porque me devuelve:
<font color='#005500>asas</color'>

Cndo tendria q devolver:
<font color='#005500'>texto</font>

Corregirmelo plis.

PD: Si le kito las comillas simples me funciona pero luego lo necesitare para el style=''

thank

aNiBaRRo

Prueba así:

$text = "<color=#005500>texto</color>";
$text = eregi_replace("(<color=)(.{7})(>)","<font color=\'\2\'>",$text);
$text = str_replace("</color>","</font>",$text);
echo $text;

Ahora sí que debería salir:
<font color='#005500'>texto</font>

Al poner (.*)(>) interpretaba 0 o más ocurencias de cualquier cosa seguidas de un ">", y se te iba hasta el último ">" del "</color>", como sabes q van a ser 7 siempre aprovechas (los guiños de ojos no se pq los pone xD)

TeTu

#3 Quiere ligar contigo, xD

guner

antiguo #3, no borres el post ; )

EnZo

aNiBaRRo me funciona bien asias :D

Pero ahora tengo un problema porque eso mismo lo necesito para hacer links de webs, q en los colores se q son 7 pero en la webs no se puede saber cuantos son...

Carcass

Pues [>]* para que coja todos los caracteres hasta el >, no incluido

EnZo

Me va perfecto pero tengo otra duda carcass. Soy un poco copion xD y me gustaria hacer lo que tienn aki en MV que cuando pones una url http://www.miweb.com se auto vincula, eso se hacerlo gracias a tu ayuda, pero en MV si pones una web sin el http:// delante www.miweb.com tambien se autovincula y la vincula asi:
<a href='http://www.miweb.com'>www.miweb.com</a>

mientras que ami con el codigo de abajo me lo hace asi:
<a href='www.miweb.com'>www.miweb.com</a>

$text=eregi_replace("(http://|www.)([^ ]*)","<a href='\0'>\0</a>",$text);

Hay alguna manera de identificar si la expresion lleva una cosa. Osea q si lleva http:// que aga una cosa y si no que aga otra.

Carcass

eregi_replace("(http://)?(www.([^ ,]*))",">a href='http://\2'<\0>/a&lg;",$text);

Si no se entiende, avisa y la intento explicar jeje

EnZo

Muxas asias de nuevo :D Lo entiendo pero mas o menos. el ? como actua? Y otra cosa si no acaba en espacio o en , y sin embargo acaba en un retorno de carro o en un simple final de linea sin continuacion de nada como haces para que lo interprete bien?

Aun asi me va perfecto. Empece a ver esto el sabado y me resulta bastante dificil xD
El caso es que he intentao añadirle una cosa y soy negaillo, corrigemelo plis :D Quiero q actue cuando en el principio y el final de la url no este el caracter '
Algo asi pero hecho correctamente xD:

eregi_replace("['](http://)?(www.([^ ,]*))[']$","<a href='http://\2'>\0</a>",$remplaza);

De esta manera las url que tengo echa con la funcon anterior que hice no me las destroza:
<a href='miweb.com'>tex</a>

Al estar la url entre comillas no actuaria para no dejarmelo asi:
<a href='<a href='miweb.com'>miweb.com</a>'>tex</a>

Carcass

Con la ? quieres decir que vale si está una vez o ninguna; con * un número cualquiera de veces, incluido cero; con +, una como poco...

Voy a investigar lo otro.

Editado:

eregi_replace("['](http://)?(www.([^ ,']*))","<a href='http://\2'>\0</a>",$remplaza);

Lo malo es que deja un espacio antes del enlace jeje

EnZo

Weno carcass despues de calentarme la cabeza bastante, no he podido lograr q funcione xD con lo del caracter ' xq ese espacio que dices q ponia, tmb cogia un retorno de carro o cualquier cosa q tubiese detras, el caso es q me lo deformaba y no hay forma.

Asi que decidi q en vez de que no actuase cuando este entre comillas que actue cuando tenga un espacio, es algo cutre pero es la mejor solucion q he e podio encontrar

$txt=eregi_replace("([ ,(\n)])((http://)?(www.([^ ,(\n)]*)))","\1<a href='http://\4'>\2</a>",$txt);

Gracias carcass ya e terminao las exp reg con tu ayuda :D

Usuarios habituales

  • EnZo
  • Carcass
  • guner
  • TeTu
  • aNiBaRRo