Foros del Web » Programando para Internet » PHP »

ayuda con expresion regular

Estas en el tema de ayuda con expresion regular en el foro de PHP en Foros del Web. Hola, estoy haciendo unas expresiones regulares para sustituir la cadena [#enlace->direccion#] por un link HTML, y la cadena [#destinoenlace#] por un <a name=...></a>, o sea, ...
  #1 (permalink)  
Antiguo 04/06/2005, 05:02
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 13 años
Puntos: 9
ayuda con expresion regular

Hola, estoy haciendo unas expresiones regulares para sustituir la cadena [#enlace->direccion#] por un link HTML, y la cadena [#destinoenlace#] por un <a name=...></a>, o sea, el destino de un enlace de pagina.

Entonces, con expresiones regulares busco lo que haya entre [# y #] y lo trato como corresponda. Para saber si es un destino y no un origen busco que no tenga "->" entre los [#..#] asi:

$patron = "{\[#([^->]*)#\]}Ui"

Hasta aqui sin problema. El problema es mi procedimiento seria mucho mas eficiente si antes de utilizar el preg_replace hago htmlentities de la cadena, entonces el link se convierte en [#enlace-&gt;direccion#], cambiando el > por &gt; y ahi esta mi problema, no se como se escribe un patron para decir que no exista la cadena exacta -&gt; porque si digo:

$patron = "{\[#([^-&gt;]*)#\]}Ui"

Busca una cadena que no tenga "-" o "&" o "g" o "t" o ";", pero yo quiero que sea la secuencia exacta la que no exista.

Ademas no se si debo escapar (con el \) los caracteres "&" y ";".

¿Alguien sabe que expresion deberia poner? Gracias.
  #2 (permalink)  
Antiguo 04/06/2005, 13:27
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 13 años
Puntos: 7
Prueba con la siguiente expresión regular:
Código PHP:
<?
$texto 
"[#enlace->direccion#]
[#enlace-&gt;direccion#]"
;

echo 
$texto "\n";
$texto preg_replace("/\[#(.*)?-(>|&gt;)(.*)?#\]/i"'<a href="$3">$1</a>'$texto);

echo 
$texto;
?>
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 04/06/2005, 13:43
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 13 años
Puntos: 9
Vale, ese me sirve para "[#enlace->direccion#] [#enlace-&gt;direccion#]"

Pero el que yo quiero es para "[#Nombre#]", es decir, como el otro esta contenido entre [# y #], pero este no debe tener ni "->" ni "-&gt;"

Gracias
  #4 (permalink)  
Antiguo 04/06/2005, 14:05
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 15 años, 4 meses
Puntos: 15
Solo es :
"#(.*)#"

Que dice todo lo que este entre los signos.
  #5 (permalink)  
Antiguo 04/06/2005, 16:49
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 13 años
Puntos: 9
Pero entonces tambien coge [#enlace->direccion#] y [#enlace-&gt;direccion#]

Debe aceptar: [#loquesea#]

Pero no debe aceptar: [#loquesea-&gt;loquesea#]

Ten en cuenta que puede haber cosas del tipo:

[#loquesea#] bla bla [#loquesea-&gt;loquesea#]

Con un patron que acepte el -&gt; cogeria todo lo que esta en rojo

[#loquesea#] bla bla [#loquesea-&gt;loquesea#]

O sea, al patron que me habeis dado haay que añadir algo como: [^&gt;], pero ese por ejemplo tambien daria falso si incuye solo una 'g' o una 't'. No se como hacer que sean los 4 caracteres seguidos. ¿Sabeis a lo q me refiero?

Gracias de todas formas por las respuestas
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 20:35.