Traductor





Función preg_replace() en PHP

La función PHP preg_replace() es parecida a PHP preg_match(), solo que en vez de comparar cadenas, sustituye caracteres mediante expresiones regulares. 
 Es muy últil y se usa para quitar de las cadenas o strings espacios en blanco, acentos, caracteres especiales, saltos de línea… 
Según la página oficial PHP preg_replace()
  • Realiza una búsqueda y sustitución de una expresión regular 
Vamos a ver mediante ejemplos y demos como podemos hacer este tipo de operaciones con esta función de PHP.
$cadenaRemplazada = preg_replace( $expRegular, $cadenaNueva, $cadena[, $limite = -1 [, &$contador ]] )

$cadenaRemplazada

Valor devuelto por la función, si la $cadena enviada en un array el resultado será un array, en caso contrario devuelve un string.

$expRegular

El patrón o expresión Regular de búsqueda. 
Puede ser tanto una cadena como una matriz de cadenas.

$cadenaNueva

Es la cadena o matriz de cadenas a reemplazar. 
Si este parámetro es una cadena y el patron o expresión regular  es una matriz, todos los patrones serán sustituidos por esa cadena. 
Si ambos parámetros, $expReguar y $cadenaNueva, son matrices, cada $expReguar será reemplazado por la $cadenaNueva equivalente. 
Si hay menos elementos en la matriz $cadenaNueva que en la matriz $expReguar, cualquier $expReguar extra será reemplazado por una cadena vacía. 
$cadenaNueva puede contener referencias de la forma \\n o de la forma $n, siendo preferida la última forma. 
Cada referencia de este tipo será sustituida por el texto capturado por el n-simo patrón entre paréntesis. 
n puede ser desde 0 a 99, y \\0 o $0 se refiere al texto coincidido por el patrón completo. 
Los paréntesis de apertura se cuentan de izquierda a derecha, comenzando por 1, para obtener el número de sub-patrones de captura. 
Se debe doblar la barra invertida para poder usarla en la sustitución ("\\\\"). 
Cuando se trabaja con un patrón de sustitución donde una retro-referencia es immediatamente seguida de otro número (p.ej.: colocar un número literal immediatamente después de un patrón coincidido), no puede usar la notación familiar \\1 para sus retro-referencias. Veamos un ejemplo: 
  • \\11, confundiría a preg_replace() ya que no sabe si quiere que la retro-referencia \\1 esté seguida por un literal 1, o que la retro-referencia \\11 esté seguida de nada. 
  • En este caso la solución es usar \${1}1
  • Esto crea una retro-referencia $1 aislada, dejando el 1 como un literal. 

$cadena

Se refiere a la cadena o matriz de cadenas a buscar y sustituir. 
Si $cadena es una matriz, entonces la búsqueda y sustitución se llevan a cabo para cada entrada de $cadena, y el valor devuelto también es una matriz. 

$limite

Las sustituciones máximas posibles por cada patrón en cada $cadena
Por defecto es -1 (sin límite). 

$contador

Si se especifica, esta variable será rellenada con el número de sustituciones hechas.

¿Qué valores son devueltos?

preg_replace() devuelve una matriz si el parámetro o expresión regular es una matriz, o, por el contrario, una cadena. 
Si se encuentran coincidencias, la nueva cadena será devuelta, de otro modo será devuelto sin cambios o NULL si se produjera un error.

Veamos algunos ejemplos

I. Vamos con un primer ejemplo de esta función de PHP que ya usé en el post de detectar links en una cadena de texto:
//cadena donde haremos las sustituciones
$cadena= 'http://www.scriptbc.com https://www.facebook.com www.google.es';
//patrones
$exp_regular='/((http|https|www)[^\s]+)/';
//cadena nueva
$cadena_nueva = '<a href="$1">$0</a>';
//filtro los enlaces
$cadena_resultante = preg_replace($exp_regular, $cadena_nueva, $cadena);
Como podréis apreciar en el ejemplo, voy asigando a las variables la $cadena a modificar, la $exp_regular para realizar la búsqueda y la $cadena_nueva que pondremos. 
El resultado es la detección de enlaces en una cadena de texto y una vez encontrados construimos el enlace.

II. Ahora vamos con un nuevo ejemplo de sustitución por array:
//cadena con numeros del 1 al 10 en texto
$cadena = 'uno dos tres cuatro cinco seis siete ocho nueve diez';
//cargo en el array los textos a sustituir
$exp_regular = array();
$exp_regular[0] = '/uno/';
$exp_regular[1] = '/tres/';
$exp_regular[2] = '/cinco/';
$exp_regular[3] = '/siete/';
$exp_regular[4] = '/nueve/';
//cargo en el array los textos que pondremos en la sustitucion
$cadena_nueva = array();
$cadena_nueva[0] = '1';
$cadena_nueva[1] = '3';
$cadena_nueva[2] = '5';
$cadena_nueva[3] = '7';
$cadena_nueva[4] = '9';
//saco el resultado por pantalla
echo preg_replace($exp_regular, $cadena_nueva, $cadena);
En este nuevo ejemplo cargamos en la $cadena los números del 1 al 10 en texto, luego en el array $exp_regular vamos cargando los textos que queremos buscar para sustituir. 
En el array $cadena_nueva ponemos el valor que queremos dejar en lugar del patrón buscado. Comentar que esta sustitución es con arrays asociativos, así que la sustitución se hace por índices.

III. Vamos a ver un último ejemplo para ver el funcionamiento del $limite y el $contador:
preg_replace($exp_regular, $cadena_nueva, $cadena, -1 , $cuenta );
echo $cuenta;
En el código superior vemos la llamada a preg_replace(), supongamos que la $cadena, el $patron y $cadena_nueva tienen los mismos valores que el ejemplo anterior. 

He puesto que no haya límite de sustituciones ‘-1′ y que el número de sustituciones las guarde en $cuenta
Si todo va bien tendría que salir por pantalla el número 5, que son las veces que se han sustituido patrones dentro del texto.

Si te hemos ayudado : )

Te agradeceríamos que apoyaras este proyecto



No se te olvide Comentar y Compartir
en:
                          

0 comentarios:

Publicar un comentario