Autor Tema: Sustituir eregi_replace() por preg_replace()  (Leído 1410 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Laura

  • Novato
  • *
  • Mensajes: 3
  • Puntuación: 0
    • Ver Perfil
Sustituir eregi_replace() por preg_replace()
« : 14 de agosto de 2013, 10:58:29 am »
Buenos días
Saludos

Estoy dando mantenimiento a un sistema y la versión del php ha cambiado en el nuevo hosting y por ende algunas funciones han quedado obsoletas, tal es el caso de la funcion eregi_replace() que debe ser sustituida por preg_replace(). En el código anterior tenia algo así:

Código: [Seleccionar]
$sql = eregi_replace($campos,"count(*)",$sql);
al cambiar o sustituir la función queda así:

Código: [Seleccionar]
$sql = preg_replace('/$campos/i','/count(*)/i','/$sql/i');
aunque ya no me indica el error se que esta mal, pues no se cual es la sintaxis correcta, por lo general me aparece este error

PHP: preg_replace - “Delimiter must not be alphanumeric or backslash”.

Mi pregunta: ¿Debo usar delimitadores en las variables?

Por favor si alguien sabe, agradeceré su respuesta

De antemano gracias  :)
« Última Modificación: 14 de agosto de 2013, 11:20:24 am por Laura »

Desconectado ashrey

  • Moderador Global
  • Fanático
  • *****
  • Mensajes: 471
  • Puntuación: 7
  • Sexo: Masculino
  • Wombat Team
    • Ver Perfil
    • Blog de ABerroteran
Re:Sustituir eregi_replace() por preg_replace()
« Respuesta #1 : 14 de agosto de 2013, 12:40:29 pm »
Ahí no estás usando el valor de las variables, estás usando literales porque tienes comillas simples. Para usar el valor de las variables debes usar comillas dobles.

Desconectado flavioSalas

  • Novato
  • *
  • Mensajes: 35
  • Puntuación: -1
    • Ver Perfil
Re:Sustituir eregi_replace() por preg_replace()
« Respuesta #2 : 20 de septiembre de 2013, 09:34:04 pm »
Lee el manual! te voy a dar la solucion al problema pero para usar preg_replace o preg_match debes saber crear expresiones regulares http://www.php.net/manual/es/reference.pcre.pattern.syntax.php
los parametros que van entre caracteres di solo aplica a la expresion regular.

Has facilitado el trabajo de la seleccion de un patron con la variable $campos
pues bien :

$match= "<$campos>i"; ); ===  $match= "/$campos/i"; );  // el delimitador puede ser cualquier caracater ver el manual http://www.php.net/manual/es/regexp.reference.delimiters.php

los otros dos parametros pasados a la funcion deben ser un simple string sin delimitadores de expresiones regulares por los siguinetes movitos:

El parametro 2 (count *) es un string de reemplazo la funcion no valida que tipo de reemplazo se debe hacer (si no es un array) si! se pueden pasar arrays como patrones de sustitucion

El tercer parametro es el sql completo (string) y el en su totalidad es el problema a solucionar por ello no hace falta que sea una expresion regular pues es la expresion a evaluar:

dicho todo esto la solucion sencilla es:
$campos= 'id,nombre,atributo1,atribut2';
$sql     = 'select  ' .$campos .'  from nombre_database';
$sql         = preg_replace('/'.$campos.'/i','  count(*) ' ,$sql );