strpbrk()
A função strpbrk() no PHP pesquisa em uma string qualquer caractere de um conjunto e retorna o trecho da string a partir da primeira correspondência.
Introdução
A função strpbrk() no PHP pesquisa em uma string qualquer um de um conjunto de caracteres e retorna o restante da string a partir da primeira correspondência. O nome significa "string pointer break" — ela percorre o haystack da esquerda para a direita e para (quebra) assim que encontra um caractere que esteja no conjunto de busca.
Isso a torna útil para tarefas como "me dê tudo a partir do primeiro @, = ou ? em diante" sem precisar escrever uma expressão regular. Este artigo aborda a sintaxe, os valores de retorno, um erro comum sobre como a correspondência é escolhida e casos de uso práticos.
Sintaxe
strpbrk(string $haystack, string $char_list): string|false| Parâmetro | Descrição |
|---|---|
$haystack | A string onde a busca será realizada. |
$char_list | Uma string listando os caracteres a procurar. Cada caractere é tratado individualmente — "abc" significa "qualquer um entre a, b ou c", não a substring "abc". |
Valor de retorno: a parte de $haystack desde o primeiro caractere correspondente até o fim da string. Se nenhum dos caracteres em $char_list estiver presente, retorna false.
strpbrk() é sensível a maiúsculas e minúsculas: pesquisar por "A" não corresponderá a um a minúsculo.
Exemplo básico
Saída:
Found 'llo World' in 'Hello World'Uma surpresa comum aqui: o resultado é llo World, não World. A função retorna a partir do primeiro caractere correspondente encontrado ao percorrer da esquerda para a direita. Embora W esteja na lista de busca, o l minúsculo em "Hello" aparece antes na string, portanto o trecho começa ali. A ordem em $char_list não importa — apenas a posição no haystack é relevante.
A correspondência é posicional, não segue a ordem da lista
É fácil supor que strpbrk() respeita a ordem dos caracteres passados. Não respeita — ela retorna a partir do caractere de busca que aparecer mais cedo no 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 foxSaída:
quick brown foxUso prático: dividir em um delimitador
Como strpbrk() retorna "tudo a partir do delimitador em diante", você pode combiná-la com substr() para obter o valor após um separador:
<?php
$pair = "name=John";
$fromEquals = strpbrk($pair, "="); // "=John"
$value = substr($fromEquals, 1); // drop the leading "=" -> "John"
echo $value;Saída:
JohnTambém funciona bem quando você aceita vários delimitadores possíveis ao mesmo tempo:
<?php
$line = "[email protected]";
echo strpbrk($line, "@?#"); // @example.comSaída:
@example.comTratando "não encontrado"
Quando nenhum dos caracteres listados existe no haystack, strpbrk() retorna false. Sempre compare com o operador estrito !== para que um resultado vazio mas válido não seja confundido com falha:
<?php
$result = strpbrk("PHP 8.4", "AEIOU"); // uppercase vowels — none present (case-sensitive)
if ($result === false) {
echo "No matching character found.";
} else {
echo $result;
}Saída:
No matching character found.strpbrk() vs. funções relacionadas
| Função | Pesquisa por | Retorna |
|---|---|---|
strpbrk() | qualquer um de vários caracteres | o restante da string a partir da primeira correspondência, ou false |
| strpos() | uma única substring | a posição numérica da correspondência, ou false |
| strstr() | uma única substring | o restante da string a partir dessa substring, ou false |
| strrchr() | a última ocorrência de um caractere | o restante da string a partir desse ponto, ou false |
Use strpbrk() quando você tem um pequeno conjunto de caracteres para reagir e deseja o restante da string. Se você sempre pesquisa apenas uma substring fixa, strstr() ou strpos() é mais claro. Para correspondência baseada em padrões, use preg_match().
Conclusão
strpbrk() retorna o restante de uma string a partir do primeiro caractere que corresponde a qualquer caractere no conjunto de busca, ou false se não houver correspondência. Lembre-se de que a correspondência é escolhida pela posição no haystack, não pela ordem da lista de busca, e que ela é sensível a maiúsculas e minúsculas. É uma alternativa concisa a uma expressão regular sempre que você precisar de "tudo a partir do primeiro delimitador em diante".