preg_replace($pattern, $replacement, $subject) encuentra cada coincidencia de una expresión regular en una cadena y la sustituye. preg_replace('/\s+/', ' ', $text) convierte cada secuencia de espacios, tabuladores y saltos de línea en un solo espacio.
La cadena original no cambia; preg_replace() devuelve una nueva. \b marca un límite de palabra, y por eso cats no se toca.
Referencias: {1} y \1
En el reemplazo, $1 representa lo que coincidió con el primer grupo de captura, $2 con el segundo y $0 la coincidencia completa. Úsalas para reordenar el texto encontrado.
Escribe el reemplazo entre comillas simples. Entre comillas dobles, "\1" se convierte en un escape octal (el byte 0x01) y "${1}" se lee como una variable llamada 1, que no está definida y usa una sintaxis de cadena obsoleta desde PHP 8.2. '\1' entre comillas simples funciona igual que '$1', pero $1 es la forma habitual.
Quitar los caracteres no alfanuméricos
Una clase de caracteres negada, [^...], coincide con todo lo que no aparece en la lista. Sustituirla por '' lo elimina. Para texto en otros idiomas, usa las clases Unicode \p{L} (cualquier letra) y \p{N} (cualquier dígito) con el modificador u, o eliminarás la é, la ü y todos los caracteres japoneses.
Crear un slug para una URL
Varios patrones seguidos convierten un título en un slug para una URL. Primero pasa a minúsculas, luego sustituye cada secuencia de caracteres no alfanuméricos por un guion y después quita los guiones de los extremos:
Varios patrones, un límite y un recuento
$pattern y $replacement pueden ser arrays: cada patrón se sustituye por el reemplazo del mismo índice, en orden. El cuarto argumento limita los reemplazos por patrón (-1 significa sin límite), y el quinto recibe cuántos reemplazos se hicieron.
Calcular el reemplazo con preg_replace_callback
Cuando el reemplazo depende de la coincidencia, usa preg_replace_callback(). Llama a tu función una vez por coincidencia con el array $matches e inserta lo que la función devuelva. Una función flecha mantiene en una línea los callbacks cortos.
preg_replace_callback_array() recibe un array de pares pattern => callback cuando cada uno de varios patrones necesita su propia función.
Texto de reemplazo que viene de una variable
Un $ o una barra invertida en el reemplazo tienen un significado, así que un reemplazo que viene de un usuario o de una base de datos puede salir alterado. Un precio de $10 se lee como una referencia al grupo 10, que no existe, y sale vacío:
Cuando ni el texto buscado ni el reemplazo son un patrón, str_replace() es la opción más sencilla y más rápida. Para probar un patrón antes de reemplazar nada, consulta preg_match().
Preguntas frecuentes
¿Cómo uso referencias en preg_replace?
Refiérete a los grupos de captura como $1, $2 (o \1) en el reemplazo: preg_replace('/(\d{4})-(\d{2})-(\d{2})/', '$3/$2/$1', '2026-03-14') devuelve "14/03/2026". Escribe el reemplazo entre comillas simples, y usa ${1} cuando a la referencia le sigue un dígito.
¿Cómo elimino todos los caracteres no alfanuméricos en PHP?
preg_replace('/[^a-zA-Z0-9]/', '', $s) conserva solo letras y dígitos ASCII. Para conservar las letras de cualquier idioma (é, ü, 日本語), usa clases Unicode con el modificador u: preg_replace('/[^\p{L}\p{N}]/u', '', $s).
¿Cuál es la diferencia entre preg_replace y preg_replace_callback?
preg_replace() recibe una cadena de reemplazo fija con marcadores $1. preg_replace_callback() llama a una función por cada coincidencia y usa lo que devuelve, así que puedes calcular el reemplazo: pasarlo a mayúsculas, hacer cálculos con él o buscarlo en un array.
¿Uso str_replace o preg_replace?
Usa str_replace() cuando reemplazas texto fijo: es más rápido y no necesita escapar nada. Usa preg_replace() cuando el texto que quieres reemplazar sigue un patrón, como cualquier secuencia de espacios, cualquier dígito o un límite de palabra.
¿Cómo reemplazo solo la primera coincidencia con preg_replace?
Pasa un límite como cuarto argumento: preg_replace('/\d+/', '#', 'a1 b2 c3', 1) devuelve "a# b2 c3". El quinto argumento, pasado por referencia, recibe el número de reemplazos hechos.