Foros del Web » Programando para Internet » PHP »

preg_replace para reemplazar tag?

Estas en el tema de preg_replace para reemplazar tag? en el foro de PHP en Foros del Web. Hola estoy tratando de crea una expresion regular para borrar el valor de $cadena cuando no haya otra cosa que tags como <br/> o <b></b>, ...
  #1 (permalink)  
Antiguo 13/01/2011, 05:00
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
preg_replace para reemplazar tag?

Hola
estoy tratando de crea una expresion regular para borrar el valor de $cadena cuando no haya otra cosa que tags como <br/> o <b></b>, etc
$cadena = preg_replace('xxxxxxx','',$cadena);


Por ejemplos con los resultados esperados:
Código PHP:
$cadena "<b></b>";
$cadena preg_replace('xxxxxxx','',$cadena); //RESULTADO: $cadena = ''; 
Código PHP:
$cadena "<b></b><br/>";
$cadena preg_replace('xxxxxxx','',$cadena); //RESULTADO: $cadena = ''; 
Código PHP:
$cadena "<b><br/></b><br/>";
$cadena preg_replace('xxxxxxx','',$cadena); //RESULTADO: $cadena = ''; 
Código PHP:
$cadena "<b>texto</b><br/>";
$cadena preg_replace('xxxxxxx','',$cadena); //RESULTADO: $cadena = '<b>texto</b><br/>'; 
Se que la expresion regular debería buscar SI HAY ALGO que NO esté encerrado por '<' y '>' y si NO encuentra algun texto que borre TODO. Pero no se como hacerlo.

alguna pista para comenzar?
Gracias

Última edición por chefnelone; 13/01/2011 a las 05:25
  #2 (permalink)  
Antiguo 13/01/2011, 06:18
Avatar de Manuellama  
Fecha de Ingreso: noviembre-2006
Ubicación: Zafra, Extremadura, Spain, Spain
Mensajes: 174
Antigüedad: 17 años, 5 meses
Puntos: 10
Respuesta: preg_replace para reemplazar tag?

Olvida las expresiones regulares. En ese caso, la respuesta puede ser más simple.

<?php


function comprobarcadena($cadena){

for ($i=0;$i<strlen($cadena);$i++){
if($cadena[$i]==">"){

if ($cadena[$i+1]!="" && $cadena[$i+1]!="<" && $cadena[$i+1] != strlen($cadena)){
return "Hay texto";
}

}

}
return "No hay texto";
}
$cadenas = "<b></b><br/>";
$cadenacontexto = "<br><b>texto</b>mas texto</br>";
echo "<hr>";
echo "La cadena 'cadena' :";
echo "\n";
echo comprobarcadena($cadenas);
echo "<hr>";
echo "La cadena 'cadenacontexto' : ";
echo "\n";
echo comprobarcadena($cadenacontexto);
echo "<hr>";
?>
  #3 (permalink)  
Antiguo 13/01/2011, 06:29
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: preg_replace para reemplazar tag?

uff.. o mas simple aun

Código PHP:
Ver original
  1. $cadena = "<b>texto</b><br/>";
  2. $cadena_new = trim(strip_tags($cadena));
  3. if ($cadena_new == '') {
  4.     $cadena = '';
  5. }
  6. echo $cadena;

saludos
  #4 (permalink)  
Antiguo 13/01/2011, 06:59
Avatar de Manuellama  
Fecha de Ingreso: noviembre-2006
Ubicación: Zafra, Extremadura, Spain, Spain
Mensajes: 174
Antigüedad: 17 años, 5 meses
Puntos: 10
Respuesta: preg_replace para reemplazar tag?

Cita:
Iniciado por Hidek1 Ver Mensaje
uff.. o mas simple aun

Código PHP:
Ver original
  1. $cadena = "<b>texto</b><br/>";
  2. $cadena_new = trim(strip_tags($cadena));
  3. if ($cadena_new == '') {
  4.     $cadena = '';
  5. }
  6. echo $cadena;

saludos
Pues...es verdad...
  #5 (permalink)  
Antiguo 16/01/2011, 03:29
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Respuesta: preg_replace para reemplazar tag?

Cita:
Iniciado por Hidek1 Ver Mensaje
uff.. o mas simple aun

Código PHP:
Ver original
  1. $cadena = "<b>texto</b><br/>";
  2. $cadena_new = trim(strip_tags($cadena));
  3. if ($cadena_new == '') {
  4.     $cadena = '';
  5. }
  6. echo $cadena;

saludos
muy simple. Gracias.
no conocia esta función: strip_tags().
Saludos
  #6 (permalink)  
Antiguo 18/01/2011, 01:34
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Respuesta: preg_replace para reemplazar tag?

Cita:
Iniciado por Hidek1 Ver Mensaje
uff.. o mas simple aun

Código PHP:
Ver original
  1. $cadena = "<b>texto</b><br/>";
  2. $cadena_new = trim(strip_tags($cadena));
  3. if ($cadena_new == '') {
  4.     $cadena = '';
  5. }
  6. echo $cadena;

saludos
ahora que lo estoy probando veo que funciona bien cuando hay texto y cuando no hay. Pero no funciona cuando hay tags con textos y tags sin textos, en el siguiente ejemplo debería borrar el tag <p></p> porque está vacío y dejar el tag <b></b> porque tiene texto:
Código PHP:
<?               
$cadena 
"<b>texto</b><br/><p></p>";
$cadena_new trim(strip_tags($cadena));
if (
$cadena_new == '') {
$cadena '';
}
echo 
$cadena;
?>
  #7 (permalink)  
Antiguo 18/01/2011, 02:24
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: preg_replace para reemplazar tag?

pero faltan estos ¿no ?

"<b></b><br/>";

"<b><br></b><br/>";
  #8 (permalink)  
Antiguo 18/01/2011, 07:47
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Respuesta: preg_replace para reemplazar tag?

Al final he encontrado una función que solo falta mejorarla un poco:
Lo que hace es borrar CUALQUIER tipo de tag que no tenga texto o tenga solo espacios como:
Código HTML:
<font size='4'> </font>
<p></p>
<p><span></span></p>
<p> </p> 
Faltaría modificarla para que también borre CUALQUIER tipo de tag que solo tenga <br/> y espacios como:
Código HTML:
<p><br/></p>
<p><br/><br/></p>
<b><br/> <br/> </b> 
Código PHP:
function stripEmptyTags ($result)
{
$regexps = array (
    
'~<(\w+)\b[^\>]*>\s*</\\1>~'
    
);
    do
    {
        
$string $result;
        
$result preg_replace ($regexps''$string);
    }
    while (
$result != $string);

    return 
$result;
}

$string "<b>texto</b><br/>texto<b><span> </span></b><p>  <br/></p><b></b><font size='4'><span></span></font>";
echo 
stripEmptyTags ($string); 
  #9 (permalink)  
Antiguo 18/01/2011, 21:21
(Desactivado)
 
Fecha de Ingreso: noviembre-2010
Ubicación: Malaga
Mensajes: 225
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: preg_replace para reemplazar tag?

joood... como as echo eso ? donde lo aprendiste?
  #10 (permalink)  
Antiguo 24/02/2011, 14:44
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: preg_replace para reemplazar tag?

Muy posiblemente no sea exactamente lo que se pregunta, porque quizá se hace para trapichear con expresiones regulares... pero a mí me encanta trabajar con el DOM o incluso Tidy para limpiar, si está disponible claro:

http://es2.php.net/manual/es/book.tidy.php
http://es2.php.net/manual/es/book.dom.php

Nada como un documento bien formado y, en cualquier caso, trabajar con el DOM: extraer el nodo o elemento que quieras, trabajar con objetos -o cadenas si quieres-, guardarlo en el formato que quieras... ;)

---
Hay varias opciones para limpieza desde la configuración, por ejemplo párrafos vacíos o etiquetas propietarias (para tidy p.ej.); pero como decía y no obstante, trabajar con el DOM quizá puede ser más pesado pero lo prefiero a cadenas con resultados puede que impredecibles.
Luego, es muy cómodo trabajar con nodos y elementos aunque siempre se genera un objeto de documento y se puede ver como matar moscas a cañonazos. Dependería creo del trabajo o resultado, para un documento completo sí es lo suyo.

Lo añado para que se contemple otra posibilidad a veces poco aprovechada ;)
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Etiquetas: reemplazar, tag
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 04:34.