Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] preg_replace con llamada a un método

Estas en el tema de preg_replace con llamada a un método en el foro de PHP en Foros del Web. Buenas amigos. Estoy en un problemilla y es que necesito que con una expresión regular, detectar una pequeña coincidencia en un string y reemplazarla por ...
  #1 (permalink)  
Antiguo 17/03/2013, 13:42
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Pregunta preg_replace con llamada a un método

Buenas amigos.

Estoy en un problemilla y es que necesito que con una expresión regular, detectar una pequeña coincidencia en un string y reemplazarla por una llamada a un método que devuelve HTML.

Lo que estoy haciendo es lo siguiente:
Código PHP:
$contenido "[Pasaelementos=5]";
$a preg_replace('/\[Pasaelementos=(\d+)\]/'$_PAGINA->Pasaelementos("\\1"), $contenido); 
Pero el parámetro al método siempre va vacío. Si en cambio convierto la llamada en un string:
Código PHP:
$contenido "[Pasaelementos=5]";
$a preg_replace('/\[Pasaelementos=(\d+)\]/''$_PAGINA->Pasaelementos(\\1)'$contenido); 
Funciona a la perfección, pero claro, lo que hace es devolverme la cadena $_PAGINA->Pasaelementos(5) suponiendo que el patrón buscado es [Pasaelementos=5]

He probado a llamar la función con eval() y con call_user_func() pero tampoco funciona supongo que por problemas de seguridad.

Alguien sabe cómo detectar una coincidencia y llamar a un método o debería cambiar el sistema?

Saludos!
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Última edición por CHuLoSoY; 17/03/2013 a las 13:53
  #2 (permalink)  
Antiguo 17/03/2013, 14:01
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: preg_replace con llamada a un método

Amigos, he encontrado la solución. Pasa por poner el modificador "e" en la expresión regular, la cual le dice a preg_replace() que trate el segundo parámetro como código php:

Mi código quedó finalmente así:
Código PHP:
Ver original
  1. $patrones = array();
  2. $patrones[] = '/\[Pasaelementos=(\d+)\]/e';
  3.        
  4. $reemplazos = array();
  5. $reemplazos[] = '$_PAGINA->Pasaelementos(\\1)';
  6.        
  7. return preg_replace($patrones, $reemplazos, $contenido);

Saludos!
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #3 (permalink)  
Antiguo 17/03/2013, 14:08
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 con llamada a un método

Es mejor preg_replace_callback() ya que el modificador de evaluación será eliminado próximamente.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 17/03/2013, 14:15
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: preg_replace con llamada a un método

ummm, interesante, se volverá deprecated en próximas versiones ? leeré sobre la función que me dices, mil gracias!
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Etiquetas: html, llamada
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 23:51.