La función PHP preg_replace() sustituye caracteres y cadenas en una cadena de texto tras una búsqueda realizada mediante expresiones regulares.
Es muy últil a la hora de quitar o eliminar espacios en blanco, acentos, caracteres especiales, saltos de línea y para crear URLs amigables.
Otras funciones de PHP similares son:
La definición oficial es la siguiente:
Realiza una búsqueda y sustitución de una expresión regular
Veamos la sintaxis extráida de su web oficial:
preg_replace ( exp_regular, cadena_nueva , cadena[, limite = -1 [, contador ]] )
El valor devuelto por la función depende de la cadena enviada, si se envía un array el resultado será un array, en caso contrario devuelve un string.
Os pongo un secillo ejemplo de preg_replace():
$cadena = 'uno dos 34 tres cuatro cinco seis siete ocho 89 nueve diez'; echo preg_replace('/[0-9]{2}/', 'SUSTITUIDO', $cadena);
Os explico el código:
En este ejemplo he reutilizado el mismo código que usé en el post sobre cómo detectar links en una cadena de texto:
echo '<h3>Cadena original sin filtrar:</h3>'; //cadena origen con los enlaces sin detectar $cadena_origen= 'https://www.anerbarrena.com https://www.facebook.com www.google.es @anerbarrena #anerbarrena'; echo $cadena_origen; //filtro los enlaces normales $cadena_resultante= preg_replace("/((http|https|www)[^\s]+)/", '<a href="$1">$0</a>', $cadena_origen); //miro si hay enlaces con solamente www, si es así le añado el http:// $cadena_resultante= preg_replace("/href=\"www/", 'href="http://www', $cadena_resultante); echo '<h3>Cadena filtrada con enlaces normales:</h3>'.$cadena_resultante; //saco los enlaces de twitter $cadena_resultante = preg_replace("/(@[^\s]+)/", '<a target=\"_blank\" href="http://twitter.com/intent/user?screen_name=$1">$0</a>', $cadena_resultante); $cadena_resultante = preg_replace("/(#[^\s]+)/", '<a target=\"_blank\" href="http://twitter.com/search?q=$1">$0</a>', $cadena_resultante); echo '<h3>Cadena filtrada con enlaces de Twitter:</h3>'.$cadena_resultante;
Detallo cada Línea:
Ahora vamos con un último ejemplo de sustitución ayudándonos con un 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);
Explico el ejemplo:
Vamos a ver un último ejemplo para ver el funcionamiento del $limite y el $contador:
//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 preg_replace($exp_regular, $cadena_nueva, $cadena, -1 , $cuenta ); echo $cuenta;
Aprovechando el ejemplo anterior: