Foros del Web » Programando para Internet » PHP »

Problema con expresiones regulares y preg_replace_callback

Estas en el tema de Problema con expresiones regulares y preg_replace_callback en el foro de PHP en Foros del Web. Buenas compañeros, alguien que me de una mano :) Estoy haciendo una pequeña function que me retorne una url bajo ciertas condiciones. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 30/07/2011, 17:10
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Problema con expresiones regulares y preg_replace_callback

Buenas compañeros, alguien que me de una mano :)

Estoy haciendo una pequeña function que me retorne una url bajo ciertas condiciones.

Código PHP:
Ver original
  1. $text2 = 'dsdas<a href="">fdfs</a> <a href="module/50">primetadddf</a>Immitto vereor  
  2. <a href="/module/1">primeta</a>feugiat macto  <a href="modules/1">livnf</a> ggg
  3. <a href="module/5">Meffffgftuvfo</a> singularis diam importunus sagaciter pertineo verto luptatum.
  4. Paulatim abluo brevitas quidem tego secundum inhibeo.';
  5.  
  6. function url($mat){
  7.  //print_r($mat);
  8.  return 'href="http://estaeslaurlquedevuelve';
  9.  
  10.   }
  11.  
  12. echo preg_replace_callback('`\bhref="(.*?)module/(\d+)(?=[?#"])`', "url", $text2);


Como se habran dado cuenta, la condición es que en la url del texto tenga la palabra "module" y el valor que necesito para procesar la url es el numero que esta después del slash module/50 por ejemplo..

Si hay conicidencia en el primer link me funciona correctamente, pero si por ejemplo la url no contiene "module" me desaparece esa parte (en el ejemplo <a href="">fdfs</a>)

Si alguien que entienda de REGEX me pudiera dar una mano o decirme donde debo buscar, he probado docenas de opciones y no he logrado hacer funcionar ninguna :P

Saludos
__________________
Drupal Argentina
  #2 (permalink)  
Antiguo 30/07/2011, 17:53
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 con expresiones regulares y preg_replace_callback

Si en el texto no hay coincidencia no debería desaparecer nada, no es propio de las expresiones regulares.

Edito: no lo había visto hasta ahora, y me confundió por un par de minutos.

La explicación es sencilla, la culpa la tiene el hambre de (.*?) pues toma desde la comilla del enlace que no tiene valor de href, y continúa hasta la otra comilla del próximo enlace.

Yo lo cambie por (\S*?) y me funcionó bien, aunque no se si realmente se adapte al problema.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 30/07/2011, 18:37
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: Problema con expresiones regulares y preg_replace_callback

Oye funciono perfectamente! gracias hombre.
Ahora para desburrarme un poco(llego el momento que durante tanto tiempo he evitado...) he estado leyendo un poco de esto, pero no logro entender bien la expresion \S segun esto: http://www.addedbytes.com/download/r...-sheet-v2/png/ no debe dejar pasar espacios en blanco.... ? cada vez que leo mas me confunde mas ... :P

Algun manual para ñoños por alli donde poder ir de a poquitos y sin dolor

Saludos.
__________________
Drupal Argentina
  #4 (permalink)  
Antiguo 30/07/2011, 19:10
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años
Puntos: 322
Respuesta: Problema con expresiones regulares y preg_replace_callback

Las RegExp no son mi fuerte, pero tengo entendido que \s representa un espacio en blanco y \S cualquier caracter que no sea espacio en blanco, son contradictorios

Saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #5 (permalink)  
Antiguo 30/07/2011, 19:13
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 con expresiones regulares y preg_replace_callback

Si, así es.

La expresión \S es el negativo del espacio, así que \S*? sería algo así como "cualquier cosa que no sea un espacio"; y tiene todo el sentido, pues los enlaces no deberían permitir espacios tal cual.

No hay manuales de esos que dictas, solo échale caña y mucha reflexión.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: expresiones, regulares
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 08:01.