Foros del Web » Programando para Internet » PHP »

Preg_replace especial

Estas en el tema de Preg_replace especial en el foro de PHP en Foros del Web. Veamos, tengo el siguiente texto dentro de una variable: Código PHP: $mi_texto = "Este coche es el mas alto de la gama,  es un coche de cuatro puertas y puedes observar sus detalles  en este enlace <a href=http://www.coche.com>Ver el coche</a>  o bien en este otro enlace www.coche.com" ;  Si hago un preg_replace a la variable ...
  #1 (permalink)  
Antiguo 17/06/2008, 09:06
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Preg_replace especial

Veamos, tengo el siguiente texto dentro de una variable:
Código PHP:
$mi_texto="Este coche es el mas alto de la gama,
 es un coche de cuatro puertas y puedes observar sus detalles 
en este enlace <a href=http://www.coche.com>Ver el coche</a> 
o bien en este otro enlace www.coche.com"

Si hago un preg_replace a la variable $mi_texto para reemplazar la palabra coche por, por ejemplo auto,
me sustituye todas las apariciones de la palabra coche y lo que yo quería era que no reemplazara las
apariciones de coche en los enlaces, es decir que los enlaces no fuesen cambiados.

Espero haberme explicado con claridad.

Saludos
  #2 (permalink)  
Antiguo 17/06/2008, 09:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Preg_replace especial

Hola ESNOLA,

Ese es el comportamiento natural de preg_replace, para que no te substituya el texto dentro de los enlaces debes de hacer una expresión regular mas potente que sea capaz de hubicar texto que este dentro de los enlaces.

Saludos.
  #3 (permalink)  
Antiguo 17/06/2008, 09:45
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: Preg_replace especial

Gracias GatorV
¿Alguna sugerencia?

Saludos
  #4 (permalink)  
Antiguo 17/06/2008, 14:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Preg_replace especial

hola... viendo la necesidad de hacer lo mismo, diseñe una función para evitar reemplazar dentro de etiquetas de HTML/BBCode ... la coloque en snipplr ya que puede ser útil..

Enlace:

http://snipplr.com/view/6718/highlig...urce-breaking/
(la detalle y comente en ingles... bueno, no necesita explicaciones, si sirve, bien)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 17/06/2008, 16:46
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: Preg_replace especial

El objeto es ese mismo, evitar reemplazar dentro de etiquetas html.

Lo que tengo es un array como este:
Código PHP:
$cambios= array (
  
'encontrar' => 
  array (
    
=> '#(?<!\\w)(Texto Uno )(?!\\w)#i',
    
=> '#(?<!\\w)(Texto Dos)(?!\\w)#i',
    
=> '#(?<!\\w)(Texto Tres\\.)(?!\\w)#i',
 ),
  
'cambiar' => 
  array (
    
=> '<div align="center" id="98">Texto cambiado por UNO</div><a class="acronym" href="enlace.php?id=98" rel="98" target="_blank">Texto cambiado por UNO</a>',
    
=> '<div align="center" id="33" >DOS Texto cambiado por DOS</div><a class="acronym" href="enlace.php?id=98" rel="98" target="_blank">DOS Texto cambiado por DOS</a>',
    
=> '<div align="center" id="42">Texto cambiado por TRES</div><a class="acronym" href="enlace.php?id=98" rel="98" target="_blank">TRES Texto cambiado por TRES</a>',
  ),
); 
Despues con una funcion hago el preg_replace;
Código PHP:
return preg_replace($cambios['encontrar'], $cambios['cambiar'], $text); 
pateketrueke
Lo que no sé es como aplicar a
Código PHP:
 function search($text$find$ord 32$repl '<strong>\\1</strong>'
Código PHP:
 $cambios['encontrar'], $cambios['cambiar'
  #6 (permalink)  
Antiguo 17/06/2008, 16:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Preg_replace especial

bueno.... ahora va mi disculpa, y ahora que lo pienso, search() sirve mas para resaltar palabras y no tanto para reemplazarlas.... deja veo, si implemento esto también, suerte!

aunque si haces esto....

Código PHP:
$texto search($texto'carro coche''auto'); 
podría funcionar para estas dos palabras (carro coche) bueno....

PDTA: re-implementando (FAILED)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 17/06/2008 a las 17:56 Razón: cambie sintaxis
  #7 (permalink)  
Antiguo 17/06/2008, 17:43
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Preg_replace especial

mmmm..... acabo de descubrir algo importante, ya que no lo pude re-implementar para que hiciera reemplazos...

si hacemos por ejemplo, reemplazos con preg_replace() usando arrays, pasa algo demasiado difícil de controlar (yo no pude)


haber si me explico...

cuando dentro de nuestra semilla-reemplazos se encuentra una misma palabra usada, en la semilla-búsqueda... en orden de aparición, se produce el mismo error.... rompe el etiquetado

Código:
$find = array('/s/', '/o/', '/pa/');
$repl = array('S', '<span>O</span>', '<strong>PA</strong>');

echo preg_replace($find, $repl, 'Hasta en la sopa');
produce esto...

HaSta en la S<s<strong>PA</strong>n>O</s<strong>PA</strong>n><strong>PA</strong>


NO se si me explico... pero mientras no solventemos esta deficiencia, es inútil el esfuerzo.... :(
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 17/06/2008, 18:26
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: Preg_replace especial

Si, te entiendo puesto que en mis pruebas me pasaba lo mismo..
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 19:41.