(PHP 4, PHP 5)
preg_replace — Realiza una búsqueda y sustitución de una expresión regular
Busca en subject coincidencias de pattern y las reemplaza con replacement.
El patrón de búsqueda. Puede ser tanto una cadena como una matriz de cadenas.
El modificador e hace que preg_replace() trate el parámetro replacement como código PHP después de que esté hecha la sustitución de referencias apropiada. Consejo: asegúrese de que replacement constituye una cadena de código PHP válida, de otra manera PHP responderá con un error de interpretación en la línea que contenga preg_replace().
La cadena o matriz de cadenas a reemplazar. Si este parámetro es una cadena y el parámetro pattern es una matriz, todos los patrones serán sustituidos por esa cadena. Si ambos parámetros, pattern y replacement, son matrices, cada pattern será reemplazado por el replacement equivalente. Si hay menos elementos en la matriz replacement que en la matriz pattern, cualquier pattern extra será reemplazado por una cadena vacía.
replacement puede contener referencias de la forma \\n o (desde PHP 4.0.4) $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 (cadena PHP "\\\\").
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. \\11, por ejemplo, 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.
Cuando se usa el modificador e, esta función escapa algunos caracteres (a saber, ', ", \ y NULL) en la cadena que sustituye a las retro-referencias. Esto está hecho para asegurarse de que no surjan errores de sintaxis en el uso de retro-referencias con comillas simples o dobles (p.ej. 'strlen(\'$1\')+strlen("$2")'). Asegúrese de que conoce la sintaxis de cadena para saber cómo se asemejarán las cadenas interpretadas.
La cadena o matriz de cadenas a buscar y sustituir.
Si subject es una matriz, entonces la búsqueda y sustitución se llevan a cabo para cada entrada de subject, y el valor devuleto también es una matriz.
Las sustituciones máximas posibles por cada patrón en cada cadena subject. Por defecto es -1 (sin límite).
Si se especifica, esta variable será rellenada con el número de sustituciones hechas.
preg_replace() devuelve una matriz si el parámetro subject es una matriz, o, por el contrario, una cadena.
Si se encuentran coincidencias, el nuevo subject será devuelto, de otro modo subject será devuelto sin cambios o NULL si se produjo un error.
Versión | Descripción |
---|---|
5.1.0 | Añadido el parámetro count |
4.0.4 | Añadida la forma '$n' para el parámetro replacement |
4.0.2 | Añadido el parámetro limit |
Example #1 Usar retro-referencias seguidas de literales numéricos
<?php
$cadena = 'Abril 15, 2003';
$patrón = '/(\w+) (\d+), (\d+)/i';
$sustitución = '${1}1,$3';
echo preg_replace($patrón, $sustitución, $cadena);
?>
El resultado del ejemplo sería:
Abril1,2003
Example #2 Usar matrices indexadas con preg_replace()
<?php
$cadena = 'El veloz murciélago hindú comía feliz cardillo y kiwi.';
$patrones = array();
$patrones[0] = '/veloz/';
$patrones[1] = '/hindú/';
$patrones[2] = '/murciélago/';
$sustituciones = array();
$sustituciones[2] = 'galápago';
$sustituciones[1] = 'africano';
$sustituciones[0] = 'lento';
echo preg_replace($patrones, $sustituciones, $cadena);
?>
El resultado del ejemplo sería:
El galápago lento africano comía feliz cardillo y kiwi.
Al usar ksort en patrones y sustituciones, podríamos obtener lo que buscábamos.
<?php
ksort($patrones);
ksort($sustituciones);
echo preg_replace($patrones, $sustituciones, $cadena);
?>
El resultado del ejemplo sería:
El lento galápago africano comía feliz cardillo y kiwi.
Example #3 Sustituir varios valores
<?php
$patrones = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
'/^\s*{(\w+)}\s*=/');
$sustitución = array ('\4/\3/\1\2', '$\1 =');
echo preg_replace($patrones, $sustitución, '{fechaInicio} = 1999-5-27');
?>
El resultado del ejemplo sería:
$fechaInicio = 27/5/1999
Example #4 Usar el modificador 'e'
<?php
preg_replace("/(<\/?)(\w+)([^>]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
?>
Esto pondría en mayúsculas todas las etiquetas HTML en el texto de entrada.
Example #5 Quitar los espacios en blanco
Este ejemplo quita los espacios en blanco en exceso de una cadena.
<?php
$cadena = 'foo o';
$cadena = preg_replace('/\s\s+/', ' ', $cadena);
// Ahora esto será 'foo o'
echo $cadena;
?>
Example #6 Usar el parámetro count
<?php
$cuenta = 0;
echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $cuenta);
echo $cuenta; //3
?>
El resultado del ejemplo sería:
xp***to 3
Note:
Cuando se usan matrices con pattern y replacement, las claves se procesan en el orden en que aparecen en la matriz. Éste no es necesariamente el mismo que el orden de índice numérico. Si usa índices para identificar qué pattern debería ser sustituido por cuál replacement, debería usar ksort() en cada matriz antes de llamar a preg_replace().