strpbrk()
La función strpbrk() en PHP busca en una cadena cualquiera de un conjunto de caracteres y devuelve la porción de la cadena a partir de la primera coincidencia.
Introducción
La función strpbrk() en PHP busca en una cadena cualquiera de un conjunto de caracteres y devuelve el resto de la cadena a partir de la primera coincidencia. El nombre proviene de "string pointer break" — recorre el haystack de izquierda a derecha y se detiene (rompe) en el momento en que encuentra un carácter que aparece en el conjunto de búsqueda.
Esto la hace útil para tareas como "dame todo a partir del primer @, = o ? en adelante" sin necesidad de escribir una expresión regular. Este artículo cubre la sintaxis, los valores de retorno, un error común sobre cómo se elige la coincidencia y casos de uso prácticos.
Sintaxis
strpbrk(string $haystack, string $char_list): string|false| Parámetro | Descripción |
|---|---|
$haystack | La cadena en la que se busca. |
$char_list | Una cadena que lista los caracteres a buscar. Cada carácter se trata individualmente — "abc" significa "cualquiera de a, b o c", no la subcadena "abc". |
Valor de retorno: la porción de $haystack desde el primer carácter coincidente hasta el final de la cadena. Si ninguno de los caracteres de $char_list está presente, devuelve false.
strpbrk() es sensible a mayúsculas y minúsculas: buscar "A" no coincidirá con una a en minúscula.
Ejemplo básico
Salida:
Found 'llo World' in 'Hello World'Una sorpresa habitual aquí: el resultado es llo World, no World. La función devuelve a partir del primer carácter coincidente que encuentra al escanear de izquierda a derecha. Aunque W está en la lista de búsqueda, la l en minúscula de "Hello" aparece antes en la cadena, por lo que el fragmento comienza allí. El orden en $char_list no importa — solo importa la posición en el haystack.
La coincidencia es posicional, no basada en el orden de la lista
Es fácil suponer que strpbrk() respeta el orden de los caracteres que se pasan. No lo hace — devuelve a partir del carácter de búsqueda que aparece antes en el haystack:
<?php
// 'o' and 'q' are both in the list; 'q' appears first in the haystack.
echo strpbrk("The quick brown fox", "oq"); // quick brown foxSalida:
quick brown foxUso práctico: dividir en un delimitador
Como strpbrk() devuelve "todo a partir del delimitador en adelante", se puede combinar con substr() para obtener el valor después de un separador:
<?php
$pair = "name=John";
$fromEquals = strpbrk($pair, "="); // "=John"
$value = substr($fromEquals, 1); // drop the leading "=" -> "John"
echo $value;Salida:
JohnTambién funciona bien cuando se aceptan varios delimitadores posibles a la vez:
<?php
$line = "[email protected]";
echo strpbrk($line, "@?#"); // @example.comSalida:
@example.comManejo del caso "no encontrado"
Cuando ningún carácter de la lista existe en el haystack, strpbrk() devuelve false. Siempre compara con el operador estricto !== para que un resultado vacío pero válido no se confunda con un fallo:
<?php
$result = strpbrk("PHP 8.4", "AEIOU"); // uppercase vowels — none present (case-sensitive)
if ($result === false) {
echo "No matching character found.";
} else {
echo $result;
}Salida:
No matching character found.strpbrk() vs. funciones relacionadas
| Función | Busca | Devuelve |
|---|---|---|
strpbrk() | cualquiera de varios caracteres | el resto de la cadena desde la primera coincidencia, o false |
| strpos() | una subcadena única | la posición numérica de la coincidencia, o false |
| strstr() | una subcadena única | el resto de la cadena desde esa subcadena, o false |
| strrchr() | la última aparición de un carácter | el resto de la cadena desde ese punto, o false |
Usa strpbrk() cuando tengas un pequeño conjunto de caracteres a los que reaccionar y quieras el resto de la cadena. Si solo buscas una subcadena fija, strstr() o strpos() es más claro. Para coincidencias basadas en patrones, usa preg_match().
Conclusión
strpbrk() devuelve el resto de una cadena a partir del primer carácter que coincide con cualquier carácter de tu conjunto de búsqueda, o false si no hay coincidencia. Recuerda que la coincidencia se elige por posición en el haystack, no por el orden de tu lista de búsqueda, y que es sensible a mayúsculas y minúsculas. Es una alternativa concisa a una expresión regular cuando necesitas "todo a partir del primer delimitador en adelante".