W3docs

strpbrk()

Функция strpbrk() в PHP ищет в строке любой из заданного набора символов и возвращает часть строки начиная с первого совпадения.

Введение

Функция strpbrk() в PHP выполняет поиск в строке любого символа из заданного набора и возвращает остаток строки, начиная с первого совпадения. Название расшифровывается как "string pointer break" — функция сканирует строку-стог слева направо и останавливается (прерывается), как только встречает символ, входящий в набор поиска.

Это удобно для задач вроде «верни мне всё начиная с первого @, = или ?» без написания регулярного выражения. В статье рассматриваются синтаксис, возвращаемые значения, распространённая ошибка понимания принципа выбора совпадения и практические сценарии использования.

Синтаксис

strpbrk(string $haystack, string $char_list): string|false
ПараметрОписание
$haystackСтрока, в которой выполняется поиск.
$char_listСтрока, перечисляющая искомые символы. Каждый символ обрабатывается отдельно"abc" означает «любой из a, b или c», а не подстрока "abc".

Возвращаемое значение: часть $haystack от первого совпавшего символа до конца строки. Если ни один из символов $char_list не найден, возвращается false.

strpbrk() чувствительна к регистру: поиск "A" не совпадёт со строчной a.

Базовый пример

php— editable, runs on the server

Вывод:

Found 'llo World' in 'Hello World'

Это может удивить: результат — llo World, не World. Функция возвращает строку начиная с первого совпавшего символа при сканировании слева направо. Хотя W входит в список поиска, строчная l в «Hello» встречается раньше в строке, поэтому срез начинается с неё. Порядок символов в $char_list не имеет значения — важна только позиция в стоге.

Совпадение определяется позицией, а не порядком в списке

Легко предположить, что strpbrk() учитывает порядок символов, которые вы передаёте. Это не так — функция возвращает строку начиная с того символа из набора, который встречается раньше всего в стоге:

<?php

// 'o' and 'q' are both in the list; 'q' appears first in the haystack.
echo strpbrk("The quick brown fox", "oq"); // quick brown fox

Вывод:

quick brown fox

Практическое применение: разбивка по разделителю

Поскольку strpbrk() возвращает «всё начиная с разделителя», её можно комбинировать с substr() для извлечения значения после разделителя:

<?php

$pair = "name=John";

$fromEquals = strpbrk($pair, "=");   // "=John"
$value      = substr($fromEquals, 1); // drop the leading "=" -> "John"

echo $value;

Вывод:

John

Функция также удобна, когда допускается несколько возможных разделителей одновременно:

<?php

$line = "[email protected]";

echo strpbrk($line, "@?#"); // @example.com

Вывод:

@example.com

Обработка случая «не найдено»

Если ни один из перечисленных символов не встречается в стоге, strpbrk() возвращает false. Всегда сравнивайте с помощью строгого оператора !==, чтобы пустой, но валидный результат не был ошибочно принят за неудачу:

<?php

$result = strpbrk("PHP 8.4", "AEIOU"); // uppercase vowels — none present (case-sensitive)

if ($result === false) {
  echo "No matching character found.";
} else {
  echo $result;
}

Вывод:

No matching character found.

strpbrk() и связанные функции

ФункцияИщетВозвращает
strpbrk()любой из нескольких символовостаток строки от первого совпадения или false
strpos()одну подстрокучисловую позицию совпадения или false
strstr()одну подстрокуостаток строки начиная с этой подстроки или false
strrchr()последнее вхождение символаостаток строки начиная с этой позиции или false

Используйте strpbrk(), когда у вас есть небольшой набор символов-триггеров и вам нужен хвост строки. Если вы ищете только одну фиксированную подстроку, strstr() или strpos() будут понятнее. Для поиска по шаблону используйте preg_match().

Заключение

strpbrk() возвращает остаток строки начиная с первого символа, совпавшего с любым символом из набора поиска, или false, если совпадения нет. Помните, что совпадение выбирается по позиции в стоге, а не по порядку в списке поиска, и что функция чувствительна к регистру. Это лаконичная альтернатива регулярному выражению, когда нужно получить «всё начиная с первого разделителя».

Практика

Практика
Что делает функция strpbrk() в PHP?
Что делает функция strpbrk() в PHP?
Was this page helpful?