strpbrk()
La fonction strpbrk() en PHP recherche dans une chaîne l'un des caractères d'un ensemble et retourne la portion à partir du premier résultat.
Introduction
La fonction strpbrk() en PHP recherche dans une chaîne l'un des caractères d'un ensemble et retourne le reste de la chaîne à partir de la première correspondance. Le nom signifie «string pointer break» — elle parcourt le sujet de gauche à droite et s'arrête (break) dès qu'elle rencontre un caractère présent dans votre ensemble de recherche.
Cela la rend très pratique pour des tâches telles que « donne-moi tout à partir du premier @, =, ou ? » sans avoir à écrire une expression régulière. Cet article couvre la syntaxe, les valeurs de retour, un piège courant lié au mode de sélection de la correspondance et des cas d'utilisation pratiques.
Syntaxe
strpbrk(string $haystack, string $char_list): string|false| Paramètre | Description |
|---|---|
$haystack | La chaîne dans laquelle effectuer la recherche. |
$char_list | Une chaîne listant les caractères à rechercher. Chaque caractère est traité individuellement — "abc" signifie « l'un quelconque de a, b ou c », et non la sous-chaîne "abc". |
Valeur de retour : la portion de $haystack à partir du premier caractère correspondant jusqu'à la fin de la chaîne. Si aucun des caractères de $char_list n'est présent, la fonction retourne false.
strpbrk() est sensible à la casse : la recherche de "A" ne correspondra pas à un a minuscule.
Exemple de base
Résultat :
Found 'llo World' in 'Hello World'Une surprise courante ici : le résultat est llo World, pas World. La fonction retourne à partir du premier caractère correspondant rencontré lors du parcours de gauche à droite. Bien que W soit dans la liste de recherche, le l minuscule de «Hello» apparaît plus tôt dans la chaîne, donc la tranche commence à cet endroit. L'ordre dans $char_list n'a pas d'importance — seule la position dans le sujet compte.
La correspondance est positionnelle, pas ordonnée par liste
Il est facile de supposer que strpbrk() respecte l'ordre des caractères passés. Ce n'est pas le cas — elle retourne à partir du caractère de recherche qui apparaît le plus tôt dans le sujet :
<?php
// 'o' and 'q' are both in the list; 'q' appears first in the haystack.
echo strpbrk("The quick brown fox", "oq"); // quick brown foxRésultat :
quick brown foxUtilisation pratique : découper sur un délimiteur
Puisque strpbrk() retourne « tout à partir du délimiteur », vous pouvez l'associer à substr() pour récupérer la valeur après un séparateur :
<?php
$pair = "name=John";
$fromEquals = strpbrk($pair, "="); // "=John"
$value = substr($fromEquals, 1); // drop the leading "=" -> "John"
echo $value;Résultat :
JohnCela fonctionne aussi très bien lorsque vous acceptez plusieurs délimiteurs possibles à la fois :
<?php
$line = "[email protected]";
echo strpbrk($line, "@?#"); // @example.comRésultat :
@example.comGérer le cas « non trouvé »
Lorsqu'aucun des caractères listés n'existe dans le sujet, strpbrk() retourne false. Comparez toujours avec l'opérateur strict !== afin qu'un résultat vide mais valide ne soit pas confondu avec un échec :
<?php
$result = strpbrk("PHP 8.4", "AEIOU"); // uppercase vowels — none present (case-sensitive)
if ($result === false) {
echo "No matching character found.";
} else {
echo $result;
}Résultat :
No matching character found.strpbrk() vs. fonctions associées
| Fonction | Recherche | Retourne |
|---|---|---|
strpbrk() | l'un quelconque de plusieurs caractères | le reste de la chaîne à partir de la première correspondance, ou false |
| strpos() | une seule sous-chaîne | la position numérique de la correspondance, ou false |
| strstr() | une seule sous-chaîne | le reste de la chaîne à partir de cette sous-chaîne, ou false |
| strrchr() | la dernière occurrence d'un caractère | le reste de la chaîne à partir de ce point, ou false |
Utilisez strpbrk() lorsque vous avez un petit ensemble de caractères à traiter et que vous souhaitez obtenir la queue de la chaîne. Si vous ne cherchez qu'une seule sous-chaîne fixe, strstr() ou strpos() est plus clair. Pour une correspondance basée sur des motifs, utilisez preg_match().
Conclusion
strpbrk() retourne le reste d'une chaîne à partir du premier caractère qui correspond à l'un des caractères de votre ensemble de recherche, ou false en l'absence de correspondance. N'oubliez pas que la correspondance est choisie par position dans le sujet, et non par l'ordre de votre liste de recherche, et qu'elle est sensible à la casse. C'est une alternative concise à une expression régulière lorsque vous avez besoin de « tout à partir du premier délimiteur ».