Foros del Web » Programando para Internet » PHP »

duda con preg_match

Estas en el tema de duda con preg_match en el foro de PHP en Foros del Web. despues de leer el manual y varios intentos fallidos, decidí preguntar como puedo en un texto encontrar la cadena ($10) y agragarle un color verde? ...
  #1 (permalink)  
Antiguo 27/12/2011, 08:42
Avatar de Vergara  
Fecha de Ingreso: junio-2010
Ubicación: San Francisco California
Mensajes: 249
Antigüedad: 13 años, 10 meses
Puntos: 6
duda con preg_match

despues de leer el manual y varios intentos fallidos, decidí preguntar

como puedo en un texto encontrar la cadena ($10) y agragarle un color verde?
Gracias.
__________________
keubo.com
  #2 (permalink)  
Antiguo 27/12/2011, 09:28
Avatar de charlyalegret  
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 12 años, 7 meses
Puntos: 140
Respuesta: duda con preg_match

mmmm, no tendrías que usar preg_replace?

Código PHP:
Ver original
  1. <?php
  2. $cadena="quiero verde el texto";
  3. $acambiar="el texto";
  4. $replace="/$acambiar/";
  5. $subst="<font color=green>$acambiar</font>";
  6. echo preg_replace($replace, $subst, $cadena);
  7. ?>

Saludos

Edito: no entiendo lo que dices de la cadena ($10): una variable string no debe empezar con un número, si no recuerdo mal... que alguien me corrija si me equivoco!
  #3 (permalink)  
Antiguo 27/12/2011, 09:36
Avatar de CesarHC  
Fecha de Ingreso: junio-2011
Ubicación: localhost
Mensajes: 566
Antigüedad: 12 años, 10 meses
Puntos: 56
Respuesta: duda con preg_match

Creo que se refiere a buscar $10( dinero) en una cadena y ponerla en verde.

$cadena='Tengo $10 y no tengo mas';
__________________
Solo la práctica no te traicionara ¡¡¡¡¡¡

Seguir el camino tu debes PHP The Right Way.
  #4 (permalink)  
Antiguo 27/12/2011, 09:43
Avatar de Vergara  
Fecha de Ingreso: junio-2010
Ubicación: San Francisco California
Mensajes: 249
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: duda con preg_match

A si es, perdon, no me explique lo suficiente, bueno, he encontrado la manera de hacerlo (creo)

Código PHP:
Ver original
  1. if (preg_match('/\$(\d+\.\d{1,2}\b|\.\d{1,2}\b|\d+(?!\.))/', $texto, $match)) {
  2. echo preg_replace('/\$(\d+\.\d{1,2}\b|\.\d{1,2}\b|\d+(?!\.))/', '<font color="green">'.'$'.$match[0].$match[1].'</font>', $texto);}
__________________
keubo.com
  #5 (permalink)  
Antiguo 27/12/2011, 09:45
Avatar de charlyalegret  
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 12 años, 7 meses
Puntos: 140
Respuesta: duda con preg_match

!!!!!!!!!!!!!
vaya!!!! jejejejeje
Pues vaya!

Código PHP:
Ver original
  1. <?php
  2.     $cadena='quiero verde el $10';
  3.     $replace='/\$10/';
  4.     $subst='<font color=green>\$10</font>';
  5.     echo preg_replace($replace, $subst, $cadena);
  6.     ?>

Edito: te me has adelantado y has encontrado la respuesta! la que te pongo también funciona, se trata de escapar el $...
  #6 (permalink)  
Antiguo 27/12/2011, 09:48
Avatar de Vergara  
Fecha de Ingreso: junio-2010
Ubicación: San Francisco California
Mensajes: 249
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: duda con preg_match

Gracias charlyalegret, pero si el precio varia? sera esta la manera mas optima de hacerlo?

Código PHP:
Ver original
  1. if (preg_match('/\$(\d+\.\d{1,2}\b|\.\d{1,2}\b|\d+(?!\.))/', $texto, $match)) {
  2. echo preg_replace('/\$(\d+\.\d{1,2}\b|\.\d{1,2}\b|\d+(?!\.))/', '<font color="green">'.'$'.$match[0].$match[1].'</font>', $texto);}
__________________
keubo.com
  #7 (permalink)  
Antiguo 27/12/2011, 09:50
Avatar de fishdesign  
Fecha de Ingreso: abril-2011
Ubicación: Málaga
Mensajes: 389
Antigüedad: 13 años
Puntos: 95
Respuesta: duda con preg_match

Para eso no hace falta (y no se debe usar) expresión regular. Usa str_replace
http://php.net/manual/es/function.str-replace.php

Saludos
__________________
Web Designer.
Themes-Up!, próximamente
  #8 (permalink)  
Antiguo 27/12/2011, 09:54
Avatar de charlyalegret  
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 12 años, 7 meses
Puntos: 140
Respuesta: duda con preg_match

Sí sí, tienes toda la razón! lo ponía sólo como ejemplo con la idea de escapar el $ suponiendo que ese era el problema...

Bueno, para ser sincero, respondo sobretodo para aprender yo, y así lo estoy consiguiendo :P

No puedo decirte si es la manera más óptima, pues se me resisten las expresiones regulares, aunque por aquí hay buenos expertos.

Saludos!
  #9 (permalink)  
Antiguo 27/12/2011, 10:02
Avatar de fishdesign  
Fecha de Ingreso: abril-2011
Ubicación: Málaga
Mensajes: 389
Antigüedad: 13 años
Puntos: 95
Respuesta: duda con preg_match

Bueno, cuando leí el mensaje ponía que lo que quería poner en verde era "$10", no otro tipo de resultados (decimales, por ejemplo).
Sin embargo, con el mismo str_replace mediante el parámetro count podría buscar por $ y pillar directamente esos dos dígitos...pero claro, como no sé exactamente que es lo que trata de hacer...
Y si, las expresiones regulares siempre van a consumir más xD


Un saludo
__________________
Web Designer.
Themes-Up!, próximamente
  #10 (permalink)  
Antiguo 27/12/2011, 10:15
Avatar de Vergara  
Fecha de Ingreso: junio-2010
Ubicación: San Francisco California
Mensajes: 249
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: duda con preg_match

fishdesign entonces es posible hacerlo con str_replace? buscar los dígitos seguidos de un $ para remplazarlos?
__________________
keubo.com
  #11 (permalink)  
Antiguo 27/12/2011, 10:35
Avatar de fishdesign  
Fecha de Ingreso: abril-2011
Ubicación: Málaga
Mensajes: 389
Antigüedad: 13 años
Puntos: 95
Respuesta: duda con preg_match

Cita:
Iniciado por Vergara Ver Mensaje
fishdesign entonces es posible hacerlo con str_replace? buscar los dígitos seguidos de un $ para remplazarlos?
Posible es, pero te va a salir más a cuenta usar la expresión regular xD
__________________
Web Designer.
Themes-Up!, próximamente
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 20:19.