W3docs

preg_split

En PHP, preg_split() divide una cadena en un array de subcadenas usando expresiones regulares como delimitadores.

Introducción

preg_split() divide una cadena en un array de subcadenas utilizando una expresión regular para describir el delimitador. Es la versión con soporte de expresiones regulares de explode(): mientras que explode() solo puede dividir por una cadena fija, preg_split() puede dividir por un patrón — cualquier secuencia de espacios en blanco, uno de varios caracteres de puntuación, un límite numérico, y mucho más.

Esta página cubre la firma de la función, cada flag, el valor de retorno y los patrones prácticos (y errores comunes) que encontrarás al usarla en código real.

Sintaxis

preg_split(
    string $pattern,
    string $subject,
    int $limit = -1,
    int $flags = 0
): array|false
ParámetroDescripción
$patternEl delimitador como expresión regular, incluyendo los delimitadores como /.../.
$subjectLa cadena de entrada a dividir.
$limitNúmero máximo de partes. -1 (el valor predeterminado) o 0 significa sin límite. Cuando se establece, la última parte contiene el resto sin dividir.
$flagsMáscara de bits de las constantes PREG_SPLIT_* (ver más abajo). Se combinan con `

La función devuelve un array de subcadenas en caso de éxito, o false si el patrón no es válido. Nunca lanza excepciones — comprueba si devuelve false (y consulta preg_last_error()) si una división puede fallar.

Un ejemplo básico

Un caso de uso clásico es dividir una cadena por un delimitador variable — aquí, cualquier secuencia de espacios en blanco o comas:

php— editable, runs on the server

El patrón [\s,]+ coincide con uno o más caracteres de espacio en blanco o comas, por lo que tanto los espacios como la coma actúan como delimitadores:

Array
(
    [0] => This
    [1] => is
    [2] => a
    [3] => test
    [4] => string
)

Dado que + es codicioso, los delimitadores consecutivos (una coma y un espacio) se combinan en un único punto de división en lugar de producir elementos vacíos.

Los flags

PREG_SPLIT_NO_EMPTY

Sin este flag, un delimitador al inicio o al final de la cadena — o dos delimitadores seguidos que el patrón no puede fusionar — produce cadenas vacías en el resultado. PREG_SPLIT_NO_EMPTY las elimina:

<?php

$string = ',apple,,banana,';

// Without the flag: empty pieces appear.
print_r(preg_split('/,/', $string));

// With the flag: only real values remain.
print_r(preg_split('/,/', $string, -1, PREG_SPLIT_NO_EMPTY));

La primera llamada devuelve ['', 'apple', '', 'banana', '']; la segunda devuelve ['apple', 'banana'].

PREG_SPLIT_DELIM_CAPTURE

Si el patrón contiene grupos de captura, este flag incluye el texto capturado en el resultado — útil cuando quieres conservar los delimitadores en lugar de descartarlos:

<?php

$expression = '3+5*2-9';
$tokens = preg_split('/([+\-*\/])/', $expression, -1, PREG_SPLIT_DELIM_CAPTURE);

print_r($tokens);

El resultado conserva tanto los números como los operadores: ['3', '+', '5', '*', '2', '-', '9'] — exactamente lo que necesita un pequeño tokenizador de expresiones.

PREG_SPLIT_OFFSET_CAPTURE

Cada elemento se convierte en un par [$substring, $offset], donde $offset es la posición en bytes dentro de la cadena original. Muy útil cuando necesitas saber de dónde proviene cada parte.

Limitar el número de divisiones

$limit limita cuántas partes se devuelven; el último elemento conserva el resto de la cadena sin dividir. Esta es la forma idiomática de dividir "los primeros N campos y luego todo lo demás":

<?php

$logLine = 'ERROR 2024-01-01 Something broke: details here';

// Split into at most 3 parts on whitespace.
$parts = preg_split('/\s+/', $logLine, 3);

print_r($parts);

Esto produce ['ERROR', '2024-01-01', 'Something broke: details here'] — el tercer elemento conserva sus espacios internos porque se alcanzó el límite.

preg_split() vs explode()

Usa explode() cuando el delimitador sea una cadena fija — es más rápido y claro. Usa preg_split() cuando el delimitador sea un patrón: espacios en blanco variables, una elección de caracteres, coincidencia sin distinción de mayúsculas, o cuando necesites conservar los delimitadores mediante PREG_SPLIT_DELIM_CAPTURE. Para volver a unir un array en una cadena, usa implode().

Errores comunes

  • Olvidar los delimitadores del patrón. El primer argumento es una expresión regular completa, por lo que necesita delimitadores: '/,/', no ','. Pasar una cadena sin delimitadores es el error más común entre principiantes.
  • Caracteres especiales sin escapar. Caracteres como ., +, | y * son metacaracteres de expresiones regulares. Para dividir por un punto literal, escápalo ('/\./') o usa preg_quote() con entradas dinámicas.
  • Cadenas vacías inesperadas. Los delimitadores al inicio o al final crean elementos vacíos — agrega PREG_SPLIT_NO_EMPTY si no los quieres.

Funciones relacionadas

Práctica

Práctica
¿Cuál es la función de preg_split en PHP y cuándo se debe usar?
¿Cuál es la función de preg_split en PHP y cuándo se debe usar?
Was this page helpful?