Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Preg_replace sin distinguir mayúsculas... pero que lo deje "como estaba"

Estas en el tema de Preg_replace sin distinguir mayúsculas... pero que lo deje "como estaba" en el foro de PHP en Foros del Web. Hola, Estoy tratando con una función preg_replace que en un determinado texto, reemplace ciertas palabras para ponerlas en negrita. El problema es que si quiero ...
  #1 (permalink)  
Antiguo 18/05/2014, 08:06
Usuario no validado
 
Fecha de Ingreso: marzo-2004
Mensajes: 349
Antigüedad: 20 años
Puntos: 0
Preg_replace sin distinguir mayúsculas... pero que lo deje "como estaba"

Hola,

Estoy tratando con una función preg_replace que en un determinado texto, reemplace ciertas palabras para ponerlas en negrita.

El problema es que si quiero que ponga en negrita la palabra EJEMPLO y en el texto aparece Ejemplo, ejemplo etc., me pone EJEMPLO en todas, cuando me gustaría que lo conservase de la forma en que aparece.

¿Ideas?

Gracias
  #2 (permalink)  
Antiguo 18/05/2014, 08:59
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Preg_replace sin distinguir mayúsculas... pero que lo deje "como estaba"

Si son palabras y no son tags ni nada mas complejo...... por que no usas stri_replace() ?
__________________
Salu2!
  #3 (permalink)  
Antiguo 18/05/2014, 15:52
Usuario no validado
 
Fecha de Ingreso: marzo-2004
Mensajes: 349
Antigüedad: 20 años
Puntos: 0
Respuesta: Preg_replace sin distinguir mayúsculas... pero que lo deje "como estaba"

Mmm… bueno, la duda se mantiene: ¿cómo hacer que deje la palabra como estaba en el texto? Porque yo igual la busco en mayúsculas o minúsculas, en el texto está en mayúsculas… y quiero dejarla como estaba allí o quedará extraño.

Ejemplo:

He de reemplazar “arroz” (y lo busco así, en minúsculas). En el texto aparece “Arroz de la mejor marca”, y quiero que lo deje así, la primera en mayúsculas, para ponerle luego un enriquecido.
  #4 (permalink)  
Antiguo 18/05/2014, 16:09
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Preg_replace sin distinguir mayúsculas... pero que lo deje "como estaba"

Prueba con preg_replace_callback() ... juega con este codigo que te hice:

Código PHP:
Ver original
  1. <?php
  2. // Datos
  3. $word = 'arroz';
  4. $document = 'Arroz de la mejor marca es el arroz que vendemos en MercadIT!';
  5. $_tag = 'b';  //<b> .. </b>
  6.  
  7. // Programa
  8.  
  9. $pattern = '/'.$word.'/i';
  10.  
  11. function reemplazos_insensibles($match)
  12. {  
  13.     global $_tag;
  14.     return "<$_tag>$match[0]</$_tag>"; 
  15. }
  16. $document = preg_replace_callback ($pattern, 'reemplazos_insensibles', $document);
  17.  
  18. // Resultado
  19.  
  20. echo $document;
__________________
Salu2!

Última edición por Italico76; 18/05/2014 a las 16:42
  #5 (permalink)  
Antiguo 18/05/2014, 17:21
Usuario no validado
 
Fecha de Ingreso: marzo-2004
Mensajes: 349
Antigüedad: 20 años
Puntos: 0
Respuesta: Preg_replace sin distinguir mayúsculas... pero que lo deje "como estaba"

Pues efectivamente, funciona :)

Como solo he usado funciones de forma muy simple y no conocía el preg de callback, ¿podrías explicarme un poco por qué se usa así y no vale solo con un preg sin más? Me vendría muy bien como ejemplo práctico de la necesidad de funciones...
  #6 (permalink)  
Antiguo 18/05/2014, 18:12
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Preg_replace sin distinguir mayúsculas... pero que lo deje "como estaba"

El manual explica su funcionamiento que son sutiles diferencias es igual al de preg_replace() mira una comparativa: 3 variaciones *

Código PHP:
Ver original
  1. <?php
  2. /*
  3.     Comparando preg_replace() con preg_replace_callback()
  4.     @author: italico76
  5. */
  6.  
  7. // Datos
  8. $word = 'arroz';
  9. $document = 'Arroz de la mejor marca es el arroz que vendemos en MercadIT!';
  10. $_tag = 'b';  //<b> .. </b>
  11.  
  12. // Programa
  13.  
  14. $pattern = '/'.$word.'/i';
  15.  
  16. function reemplazos_insensibles($match)
  17. {  
  18.     global $_tag;
  19.     return "<$_tag>$match[0]</$_tag>"; 
  20. }
  21.  
  22.  
  23. /*
  24.   preg_replace_callback
  25. */
  26. $out = preg_replace_callback ($pattern,'reemplazos_insensibles', $document);
  27. printf ("%s\n<br/>",$out); 
  28.  
  29. /*
  30.  preg_replace_callback + funciones anonimas
  31. */
  32. $out = preg_replace_callback ($pattern, function($match)
  33.     {
  34.         global $_tag;
  35.         return "<$_tag>$match[0]</$_tag>"; 
  36.     }
  37.     , $document);
  38. printf ("%s\n<br/>",$out); 
  39.    
  40. /*
  41.     preg_replace
  42. */
  43. $out = preg_replace ($pattern , "<$_tag>"."$0"."</$_tag>" , $document);
  44. printf ("%s\n",$out);
__________________
Salu2!

Última edición por Italico76; 18/05/2014 a las 20:11

Etiquetas: Ninguno
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 07:41.