Tema 12 · División

Función preg_split(): Separación Inteligente de Texto vs explode()

Divide cadenas de texto complejas con delimitadores variables (múltiples espacios, comas y puntos y coma) usando preg_split() y sus banderas especiales.

¿Cuándo usar preg_split() en lugar de explode()?

La función nativa explode() de PHP es extremadamente rápida, pero solo acepta un delimitador literal único y fijo (por ejemplo, separar estrictamente por ",").

En la vida real, los datos introducidos por usuarios o importados de hojas de cálculo CSV vienen sucios: a veces separados por comas, a veces por punto y coma, con espacios irregulares, tabulaciones o saltos de línea.

Para estos casos, preg_split() permite dividir la cadena utilizando una expresión regular como delimitador dinámico.

array|false preg_split(string $pattern, string $subject, int $limit = -1, int $flags = 0)

Banderas (Flags) Esenciales de preg_split()

Bandera Efecto Práctico
PREG_SPLIT_NO_EMPTY Descarta elementos vacíos: Si hay delimitadores consecutivos (ej: dos comas seguidas ,,), no genera elementos vacíos "" en el array resultante.
PREG_SPLIT_DELIM_CAPTURE Conserva los delimitadores: Si el patrón contiene paréntesis de captura (...), los delimitadores que causaron la división se insertan también dentro del array resultante.
PREG_SPLIT_OFFSET_CAPTURE Devuelve cada elemento como un par [0 => $fragmento, 1 => $posicion] indicando el offset en bytes.

⚡ Parser de Etiquetas (Tags) y Palabras Clave con Delimitadores Mixtos

Ejemplo interactivo. Dividimos una entrada de tags sucia donde el usuario mezcló comas, punto y coma, barras y espacios arbitrarios:

split_tags.php
Solo lectura
<?php
// Entrada de etiquetas introducida por un usuario con formato inconsistente
$tagsEntrada = "PHP8.3,  backend ;  Desarrollo Web /   Docker ,;  Cloud-Hosting ,  ,  API-REST ";

// Patrón que coincide con cualquier combinación de comas, puntos y coma, barras inclinadas y espacios
$patronDelimitadores = '/[\s,;\/]+/';

echo "<div style='font-family:system-ui; max-width:640px; padding:15px;'>";
echo "<h3 style='color:#0f172a; margin-top:0;'>🏷️ Parser de Tags con preg_split()</h3>";
echo "<p style='color:#64748b; font-size:13px;'>Entrada original sucia: <code>" . htmlspecialchars($tagsEntrada) . "</code></p>";

// Con la bandera PREG_SPLIT_NO_EMPTY se descartan elementos en blanco
$tagsLimpios = preg_split($patronDelimitadores, $tagsEntrada, -1, PREG_SPLIT_NO_EMPTY);

echo "<p style='color:#059669; font-weight:bold; margin-bottom:8px;'>Etiquetas extraídas y normalizadas (" . count($tagsLimpios) . "):</p>";
echo "<div style='display:flex; flex-wrap:wrap; gap:8px;'>";

foreach ($tagsLimpios as $tag) {
    echo "<span style='background:#0284c7; color:#ffffff; font-weight:600; font-size:12px; padding:5px 12px; border-radius:20px; box-shadow:0 1px 2px rgba(0,0,0,0.1);'>";
    echo "  #" . htmlspecialchars($tag);
    echo "</span>";
}

echo "</div>";
echo "</div>";
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🧠
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección
1 Pregunta
Pregunta 1
¿Qué función cumple la bandera PREG_SPLIT_NO_EMPTY en una llamada a preg_split()?
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Regex en PHP: Expresiones Regulares & PCRE y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.