Foros del Web » Programando para Internet » PHP »

Duda con una expresion regular.

Estas en el tema de Duda con una expresion regular. en el foro de PHP en Foros del Web. Hola amigos, estoy tratando de hacer lo siguiente: Una function que me valide una expresion regular: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original ......   case ...
  #1 (permalink)  
Antiguo 11/06/2011, 09:35
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Duda con una expresion regular.

Hola amigos, estoy tratando de hacer lo siguiente:

Una function que me valide una expresion regular:

Código PHP:
Ver original
  1. ......
  2.  
  3. case 'process':
  4.  return preg_replace_callback('`\bhref="item/(\d+)(?=[?#"])`', '_filter_process', $text);
  5.  
  6.  default:
  7.   return $text;


Hasta aca todo bien, logre hacer de que si hay coincidencia en la cadena $text retorne un valor de reemplazo. Pero lo que no logro hacer funcionar es que en la expresion si hay algo antes de item lo pase por alto... sea el valor que sea.

Por ejemplo en mi $text le paso:

Código PHP:
Ver original
  1. gravis tation. <a href="item/1">uynuuug</a> humo genitus pagus odio

devuelve ok y reemplaza por lo que le pido
Pero si le paso

Código PHP:
Ver original
  1. gravis tation. <a href="cualquiera/o-cualquier/item/1">uynuuug</a> humo genitus pagus odio

No me hace el callback . alguien me puede guiar o decirme donde buscar seria genial.

Saludos.
__________________
Drupal Argentina
  #2 (permalink)  
Antiguo 11/06/2011, 10:00
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Duda con una expresion regular.

Si he entendido lo que querías, tendrás que especificar en la expresión regular que puede haber algo antes de item.

Código PHP:
Ver original
  1. preg_replace_callback('`\bhref=".*/item/(\d+)(?=[?#"])`', '_filter_process', $text);
  #3 (permalink)  
Antiguo 11/06/2011, 10:12
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Duda con una expresion regular.

Las regex no son lo mio, pero el .* es muy codicioso(greedy según los gringos), y creo que el que muestras alexg88 deja fuera el primer ejemplo de NUCKLEAR, podría ser algo así:

\bhref=".*item/(\d+)(?=[?#"])"

o talves asi:

\bhref="(?:[\w-/]+)?item/(\d+)(?=[?#"])"

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 11/06/2011, 10:31
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Duda con una expresion regular.

Es verdad, la / no habría que ponerla, fallo mío.
  #5 (permalink)  
Antiguo 11/06/2011, 15:17
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: Duda con una expresion regular.

Pes si, solo con aghregar .* funciona. No se por que me enredo tanto con las cosas mas simples. Me estaba volviendo pelado y tratar de entender por que poniendo (.*) no funcionaba. Esto es una tarea pendiente para mi.

Saludos y gracias. :)
__________________
Drupal Argentina

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 22:24.