Ver Mensaje Individual
  #8 (permalink)  
Antiguo 13/08/2008, 09:20
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Expresiones regulares

Hola tabueno,

Tenés 2 formas de hacer esto:
- Si sabés que la cadena nunca contendrá un "<", podés usar un patrón como este:

<elimina>([^<]*)</elimina>

Que quiere decir "coincido con cualquier secuencia de caracteres que NO contenga un <". La idea es que la coincidencia termine en cuanto encuentre un <, que es el comienzo de la etiqueta de cierre.

- Si no podés asegurar que la cadena no contendrá un <, la solución es pedirle al patrón que coincida con el menor conjunto de caracteres posible. Esto se logra poniendo un ? junto al cuantificador:

Código PHP:
$cad eregi_replace("<elimina>.*?</elimina>""",$cad); 
(quito el \/ porque únicamente agrega confusión, es inútil para las expresiones regulares POSIX (sí se vuelve necesario en algunos casos con expresiones regulares compatibles con Perl)

El motivo por el que tu patrón original no funciona es que por defecto el patrón "intenta" coincidir con la mayor cadena posible, que en tu ejemplo sería:

palabra1 <elimina> frase a eliminar </elimina> palabra2 <elimina> frase a eliminar </elimina> palabra3


Saludos.