Foros del Web » Programando para Internet » PHP »

Problema remplazar parte de una cadena

Estas en el tema de Problema remplazar parte de una cadena en el foro de PHP en Foros del Web. Hola, tengo un problema en remplazar parte de una cadena. El problema es que la cadenas que tengo tienen etiquetas HTML y lo intentado de ...
  #1 (permalink)  
Antiguo 17/07/2014, 16:16
 
Fecha de Ingreso: febrero-2012
Mensajes: 23
Antigüedad: 12 años, 2 meses
Puntos: 0
Problema remplazar parte de una cadena

Hola,

tengo un problema en remplazar parte de una cadena.
El problema es que la cadenas que tengo tienen etiquetas HTML y lo intentado de varias maneras, pero no consigo obtener lo que me propongo.

Pongamos el caso que la cadena sea:
<p class="txt">#augusto hoy ha ido a la playa <img src="imagen.jpg"/> con #martin y #pedro</p>

Lo que quiero obtener, es remplazar todos los nombres que empiezan con # con los mismos nombre pero con un enlace... ejemplo:
#augusto -> <a href="enlace.php">#augusto</a>
#martin -> <a href="enlace.php">#augusto</a>
#pedro -> <a href="enlace.php">#augusto</a>

Lo he intentado con un array, $array = split(' ',$cadena);, para luego controlar si cada palabra empieza con un # y formatearlas con un ciclo for...
pero el problema es que no siempre las palabras están separadas por un espacio, como por ejemplo ">#augusto".

Como podría hacerlo?!?!
Muchas gracias
  #2 (permalink)  
Antiguo 17/07/2014, 16:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema remplazar parte de una cadena

Necesitas usar expresiones regulares, básicamente con algo así:
Código PHP:
Ver original
  1. $foo = 'a #b c #d';
  2. echo preg_replace('/#(\w+)/', '[$1]', $foo); // a [b] c [d]
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 17/07/2014, 16:59
 
Fecha de Ingreso: febrero-2012
Mensajes: 23
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema remplazar parte de una cadena

Hola y gracias por la respuesta...

Con este que obtengo, que es lo que me devuelve? Tengo que crear un array?
si me puedes explicar el razonamiento... (para que llegue a entenderlo)

Me olvidaba en mi post decir que no puedo eliminar los tags HTML, los necesito y que quiero obtener:
#augusto -> <a href="enlace.php">#augusto</a>
#martin -> <a href="enlace.php">#martin</a>
#pedro -> <a href="enlace.php">#pedro</a>

Sorry
  #4 (permalink)  
Antiguo 18/07/2014, 00:24
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 11 años, 4 meses
Puntos: 10
Respuesta: Problema remplazar parte de una cadena

..........

Última edición por jmdearpe; 18/07/2014 a las 00:46
  #5 (permalink)  
Antiguo 18/07/2014, 04:16
 
Fecha de Ingreso: febrero-2012
Mensajes: 23
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema remplazar parte de una cadena

Hola,
al final he estudiado lo que me has dicho y tengo la solucion:

Código PHP:
$txt '<p class="txt">#mario oggi va in spaggia<img src="img.jpg"/> con #luca e #sara</p>';
$txt preg_replace('/#([a-zA-Z0-9_-]+)/''<a href="enlace.php?e=$1">#$1</a>'$txt); 
Solo tengo un problema... si tengo un enlace y dentro de ello hay #, no quiero que lo convierta.
Ejemplo:
$txt = '<p class="txt"><a href='http://www.website.it/index.php#casacom?es=ot'>http://www.website.it/index.php#casacom?es=ot</a> visita este #link</p>';

Lo estoy intentando pero no tengo resultados... que puedo hacer?
Gracias
  #6 (permalink)  
Antiguo 18/07/2014, 10:07
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema remplazar parte de una cadena

En ese caso debes restringir tu expresión para que sólo trate dichas cadenas cuando están separadas de otros valores.

Cita:
/(?:^|\b)#([a-zA-Z0-9_-]+)(?:$|\b)/
Consulta una referencia para comprender las opciones que he agregado.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: cadena, html, parte, remplazar
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 18:59.