Foros del Web » Programando para Internet » PHP »

Seleccionar parte de una cadena dentro de un texto

Estas en el tema de Seleccionar parte de una cadena dentro de un texto en el foro de PHP en Foros del Web. Buenas, Tengo la siguiente cadena a la que quiero eliminar los tags, y además una parte del texto. Código PHP: <?php $cadena = "<p>cualquier cosa <a href='http://www.dom.net/index.php'>enlace</a>.</p>" ; ...
  #1 (permalink)  
Antiguo 15/06/2011, 03:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 71
Antigüedad: 15 años, 8 meses
Puntos: 0
Seleccionar parte de una cadena dentro de un texto

Buenas,
Tengo la siguiente cadena a la que quiero eliminar los tags, y además una parte del texto.

Código PHP:
<?php

$cadena
="<p>cualquier cosa <a href='http://www.dom.net/index.php'>enlace</a>.</p>";
$cadena.="<p><div></p>";
$cadena.="<a href='http://www.dom.net/uploads/etiqu.jpg'><img src='http://www.etiqu.net/uploads/etiqu.jpg' alt='etiqu' width='240' height='145' /></a>";
$cadena.="<p class='eliminar'>string a eliminar</p>";
$cadena.="</div>";

$cadena=str_replace('string',""strip_tags($cadena), $numero);

echo 
$cadena;


?>
Así funciona y elimina las etiquetas y la palabra "string", pero lo que necesito es que se elimine siempre lo que haya entre las etiquetas:

Código PHP:
"<p class='eliminar'>...</p>" 
...independientemente de lo que contengan dentro ya que variaría.

No se si es posible seleccionar desde <p class='eliminar'> a la siguiente etiqueta <p> para eliminarlo.

Un saludo.

Última edición por naked; 15/06/2011 a las 03:55
  #2 (permalink)  
Antiguo 15/06/2011, 04:16
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Seleccionar parte de una cadena dentro de un texto

Se puede perfectamente, pero necesitaras hacerlo con expresiones regulares, visita: http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 15/06/2011, 04:39
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 9 meses
Puntos: 58
Respuesta: Seleccionar parte de una cadena dentro de un texto

Mira este link:

Enlace

Esa función me sirvió mucho a mi. Intenta adaptarla a tus necesidades.
  #4 (permalink)  
Antiguo 16/06/2011, 11:09
 
Fecha de Ingreso: marzo-2009
Mensajes: 71
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Seleccionar parte de una cadena dentro de un texto

Gracias Triby, he conseguido eliminar la parte de la cadena con la expresión regular:

Código PHP:
strip_tags(eregi_replace("<p class='eliminar'>([^>]+)</p>""", ($row->post_content))) 

... he conseguido eliminar tags y lo que hay entre las etiquetas (<p class='eliminar'></p>) , pero cuando elimina las lineas

Código PHP:
$cadena.="<p><div></p>";
$cadena.="<a href='http://www.dom.net/uploads/etiqu.jpg'><img src='http://www.etiqu.net/uploads/etiqu.jpg' alt='etiqu' width='240' height='145' /></a>";
$cadena.="<p class='eliminar'>string a eliminar</p>";
$cadena.="</div>"

...deja por cada una un salto de linea, dejando entre los párrafos del documento un gran espacio.

¿Se pueden eliminar los saltos de linea utilizando la expresión regular? Si es así donde debería meter en esa expresión la "/n" si es así como debería hacerlo. Ando perdido con las expresiones regulares, voy entendiendo lo que significa cada caracter pero no el orden en que se usa ni como se usan.

Un saludo.

PD: Gracias por el enlace Nexus, pero el contenido entre las etiquetas sería variable, y en el ejemplo eliminaba un número de caracteres determinado.

Última edición por naked; 16/06/2011 a las 14:58
  #5 (permalink)  
Antiguo 16/06/2011, 16:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Seleccionar parte de una cadena dentro de un texto

Dos cosas:

1- Las funciones ereg* ya son obsoletas y se recomienda en su lugar preg*, pero hay ciertas diferencias en las expresiones regulares, es cosa de probar un poco.
2- Al menos en el ejemplo que mencionas no se ven saltos de linea y, por tanto, no tendrian que aparecer. Pero, supongo que podrias intentar incluir en la expresion regular los saltos de linea antes y despues, pero opcionales.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 16/06/2011, 16:28
 
Fecha de Ingreso: marzo-2009
Mensajes: 71
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Seleccionar parte de una cadena dentro de un texto

Es verdad tienes razón, los saltos de linea que se producen no tienen nada que ver con la expresión regular.

Esta cadena...

Código PHP:
$cadena.="<p><div></p>";
$cadena.="<a href='http://www.dom.net/uploads/etiqu.jpg'><img src='http://www.etiqu.net/uploads/etiqu.jpg' alt='etiqu' width='240' height='145' /></a>";
$cadena.="<p class='eliminar'>string a eliminar</p>";
$cadena.="</div>"
...es más larga por el principio y por el final. La cadena es un texto con varios parrafos y una imagen (la parte de la cadena publicada). Pero es verdad, tienes razón, ahí no se ven saltos de linea por que lo puse así de un principio para explicar el ejemplo, lo siento si he creado confusión con eso. El texto que toma de la base de datos sería así:


Código PHP:
Sed at malis omnesque delicatausu et iusto zzril melioreDicunt maiorum eloquentiam cum cusit summo dolor essent te

Sed at malis omnesque delicatausu et iusto zzril melioreDicunt maiorum eloquentiam cum cusit summo dolor essent te

Ne quodsi nusquam legendos hasea dicit voluptua eloquentiam proad sit quas qualisque.

<
a href='http://www.dom.net/uploads/etiqu.jpg'><img src='http://www.etiqu.net/uploads/etiqu.jpg' alt='etiqu' width='240' height='145' /></a>
<
class='eliminar'>string a eliminar</p>
</
div>

Sed at malis omnesque delicatausu et iusto zzril meliore

Sed at malis omnesque delicatausu et iusto zzril melioreDicunt maiorum eloquentiam cum cusit summo dolor essent te

Ne quodsi nusquam legendos hasea dicit voluptua eloquentiam proad sit quas qualisque
...cuando lo imprime queda así

Código PHP:
Sed at malis omnesque delicatausu et iusto zzril melioreDicunt maiorum eloquentiam cum cusit summo dolor essent te

Sed at malis omnesque delicatausu et iusto zzril melioreDicunt maiorum eloquentiam cum cusit summo dolor essent te

Ne quodsi nusquam legendos hasea dicit voluptua eloquentiam proad sit quas qualisque.





Sed at malis omnesque delicatausu et iusto zzril meliore

Sed at malis omnesque delicatausu et iusto zzril melioreDicunt maiorum eloquentiam cum cusit summo dolor essent te

Ne quodsi nusquam legendos hasea dicit voluptua eloquentiam proad sit quas qualisque

Los saltos de línea los provoca la parte de la imagen. Ahora que dices que la regex no tiene nada que ver con los saltos y lo entiendo, se me ocurre que debe ser al utilizar...

Código PHP:
strip_tags(,,,); 
¿Se podrían eliminar estos saltos de línea o que de algún modo se forzara que solo hubiera un salto de línea por parrafo?

Ahora me pongo con lo de la función preg_replace, gracias Triby.

Un saludo.

Última edición por naked; 16/06/2011 a las 17:01
  #7 (permalink)  
Antiguo 16/06/2011, 19:02
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Seleccionar parte de una cadena dentro de un texto

Con preg_replace puedes reemplazar multiples saltos de linea por uno solo... creo que seria algo asi:

Código PHP:
Ver original
  1. $str = preg_replace('/\n\n+/', "\n", $str);

En caso de que estes trabajando en Windows o el origen del texto incluya retornos de carro, no te funcionara, tendrias que adaptar la expresion, o bien, eliminar los retornos de carro "\r"
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 18/06/2011, 06:13
 
Fecha de Ingreso: marzo-2009
Mensajes: 71
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Seleccionar parte de una cadena dentro de un texto

Bueno parece que he conseguido algo, no se si hay un modo más limpio de hacerlo.

De estos dos modos funciona:

Código PHP:
$saltosdelinea = array("\r\n\r\n\r\n\r\n""\n\r\n\r\n\r");
$cadenasinsaltos str_replace("saltosdelinea ""\r\n"$cadena); 
... así también ha funcionado

Código PHP:
$cadenasinsaltos str_replace("\r\n\r\n\r\n\r\n\r\n\r\n""\r\n"$cadena); 
Muchas gracias Triby, tu ayuda ha sido crucial para hacerlo ;) .
Un abrazo.

Etiquetas: seleccionar, cadenas
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 15:12.