
В PHP поиск подстроки в строке чаще всего выполняется с помощью функций strpos, stripos и str_contains. strpos возвращает индекс первого вхождения подстроки или false, если подстрока не найдена, что позволяет строить условные проверки и управлять логикой обработки текста.
Для поиска без учёта регистра используется stripos, которая работает аналогично strpos, но игнорирует различие между заглавными и строчными буквами. Это особенно полезно при анализе данных, где регистр символов непостоянен, например, в email-адресах или пользовательских комментариях.
Если требуется проверить наличие подстроки и получить логический результат, PHP 8+ предлагает функцию str_contains. Она возвращает true или false, что упрощает проверку и делает код более читаемым при простых проверках в условных конструкциях.
Для поиска всех вхождений подстроки или сложных шаблонов применяются регулярные выражения через preg_match_all. Этот метод позволяет извлекать совпадения с учётом контекста, например, находить все ссылки в тексте или все цифры, соответствующие определённому формату.
Выбор подходящего метода зависит от задачи: strpos и stripos подходят для прямых проверок и позиционирования, str_contains – для быстрого контроля наличия подстроки, а preg_match_all – для сложного анализа текста с извлечением данных.
Использование функции strpos для проверки наличия подстроки

Функция strpos возвращает позицию первого вхождения подстроки в строке. Если подстрока не найдена, результатом будет false. Для точного сравнения рекомендуется использовать строгое сравнение (===), чтобы отличать позицию 0 от отсутствия подстроки.
Пример проверки наличия слова в тексте:
if (strpos($text, ‘PHP’) !== false) { /* обработка */ }. В этом случае код корректно срабатывает даже если подстрока находится в начале строки.
Функция поддерживает необязательный параметр $offset, который позволяет начинать поиск с определённой позиции. Это удобно при последовательном поиске нескольких вхождений без использования регулярных выражений.
Для обработки больших строк лучше использовать strpos вместо регулярных выражений, так как она работает быстрее и потребляет меньше ресурсов. Она также совместима со всеми версиями PHP начиная с 4.0, что обеспечивает стабильность кода на разных проектах.
При работе с многобайтовыми строками стоит применять mb_strpos, чтобы корректно учитывать символы UTF-8, иначе поиск может вернуть неправильные позиции при наличии кириллицы или специальных символов.
Функция str_contains: быстрый способ поиска подстроки

Функция str_contains проверяет наличие подстроки в строке и возвращает true или false. Она была добавлена в PHP 8.0 и упрощает код, когда не требуется определять позицию подстроки.
Пример использования:
if (str_contains($text, ‘example’)) { /* выполняем действия */ }. Этот подход исключает необходимость строгого сравнения с false, как при strpos, и делает проверку более читаемой.
Функция чувствительна к регистру. Для нечувствительного к регистру поиска можно преобразовать обе строки к одному регистру через mb_strtolower или strtolower:
str_contains(mb_strtolower($text), ‘example’).
Применение str_contains особенно удобно для фильтрации входящих данных, проверки наличия ключевых слов в текстах или валидации форматов URL и email без лишних вычислений.
В отличие от strpos, str_contains не возвращает индекс вхождения. Если позиция подстроки важна для дальнейшей обработки, рекомендуется использовать strpos вместо str_contains.
Поиск всех вхождений подстроки с помощью preg_match_all

Функция preg_match_all позволяет находить все совпадения подстроки или шаблона в строке с помощью регулярных выражений. Она возвращает количество найденных совпадений и сохраняет результаты в массив.
Пример использования для поиска всех email-адресов в тексте:
preg_match_all(‘/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i’, $text, $matches). Результат хранится в $matches[0].
Для поиска повторяющихся слов или цифр удобно использовать квантификаторы регулярных выражений, например \b\d{2,4}\b для извлечения чисел длиной от 2 до 4 цифр.
Использование preg_match_all оправдано при необходимости обработки сложных шаблонов и извлечения данных с точной структурой. Для простого поиска одной подстроки достаточно применять strpos или str_contains, что снижает нагрузку на процессор.
Результаты preg_match_all можно напрямую использовать в циклах для дальнейшей фильтрации, замены или анализа, что делает функцию универсальным инструментом для парсинга текста и подготовки данных.
Как извлечь подстроку после определённого текста
Чтобы получить часть строки, которая идёт после определённого слова или символа, используют комбинацию функций strpos и substr. Сначала определяется позиция искомого текста, затем извлекается всё, что следует за ним.
Пример:
$position = strpos($text, ‘ключ’);
if ($position !== false) {
$result = substr($text, $position + strlen(‘ключ’));
}
В $result будет находиться вся строка после слова «ключ».
Если требуется обработать несколько исходных строк, удобно использовать таблицу для хранения результатов и последующей фильтрации:
| Исходная строка | Искомое слово | Результат после слова |
|---|---|---|
| user@example.com | @ | example.com |
| product:12345 | : | 12345 |
| report_2025_final | _ | 2025_final |
Для динамического применения можно обернуть логику в функцию, принимающую текст и ключевое слово, возвращая подстроку после него. Это упрощает обработку массивов строк и обеспечивает единообразный подход при извлечении данных из логов, email или форматов с разделителями.
Чувствительный и нечувствительный к регистру поиск с stripos

Функция stripos выполняет поиск подстроки в строке без учёта регистра символов. Она возвращает позицию первого вхождения или false, если подстрока отсутствует. Для проверки результата рекомендуется использовать строгое сравнение (!== false), чтобы корректно обрабатывать вхождения в начале строки.
Пример нечувствительного к регистру поиска:
if (stripos($text, ‘php’) !== false) { /* обработка */ }. Этот код найдёт ‘PHP’, ‘Php’ или ‘php’ без дополнительной конвертации регистра.
Для поиска с учётом регистра используется strpos. Разница между strpos и stripos критична при проверке идентификаторов, паролей или ключевых слов, где важен точный регистр символов.
Функция stripos совместима с многобайтовыми строками через mb_stripos, что обеспечивает корректное позиционирование символов в UTF-8. Это важно при обработке текста на кириллице, акцентах или специальных символах.
Нечувствительный к регистру поиск удобен для фильтрации пользовательского ввода, анализа текстов и проверки ключевых слов в больших документах, сокращая необходимость предварительной конвертации строки в один регистр.
Замена найденной подстроки на другой текст с str_replace
Функция str_replace заменяет все вхождения указанной подстроки на другой текст в строке или массиве. Она возвращает изменённую строку и не модифицирует исходную переменную, если результат не присвоен.
Пример замены слова в строке:
$newText = str_replace(‘старый’, ‘новый’, $text);
Рекомендации по использованию:
- Можно одновременно заменять несколько подстрок, передавая массивы для поиска и замены:
- Для нечувствительной к регистру замены используйте str_ireplace.
- При работе с большими текстами или массивами строк функция сохраняет высокую производительность.
- Результаты можно хранить в отдельной переменной для контроля изменений и последующего логирования.
$newText = str_replace([‘старый’, ‘пример’], [‘новый’, ‘тест’], $text);
Применение str_replace удобно для:
- Массовой замены ключевых слов в документах или шаблонах.
- Очистки текста от нежелательных символов или тегов.
- Автоматической подстановки данных в шаблонные строки.
- Обработки массивов строк, где каждая строка требует идентичной замены.
Вопрос-ответ:
Как узнать, находится ли подстрока в начале строки с помощью PHP?
Для проверки начала строки можно использовать функцию strpos. Если функция возвращает 0, значит подстрока находится в самом начале. Важно использовать строгое сравнение (=== 0), чтобы отличить результат от false, который указывает на отсутствие подстроки. Пример: if (strpos($text, ‘Привет’) === 0) { /* обработка */ }.
Можно ли искать подстроку без учёта регистра символов?
Да, для этого существует функция stripos. Она работает аналогично strpos, но не различает заглавные и строчные буквы. Это удобно для анализа пользовательского ввода или текста на разных языках. Пример: stripos($text, ‘php’) !== false проверит наличие ‘PHP’, ‘Php’ или ‘php’.
Как найти все вхождения определённого слова в тексте?
Для поиска нескольких совпадений используется preg_match_all. Она позволяет искать подстроку или шаблон по регулярному выражению и возвращает массив всех совпадений. Например, чтобы найти все email-адреса: preg_match_all(‘/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i’, $text, $matches). Результат хранится в $matches[0] для дальнейшей обработки.
Как извлечь часть строки после определённого символа или слова?
Используют комбинацию strpos и substr. Сначала находим позицию ключевого слова, затем получаем подстроку после него. Пример: $pos = strpos($text, ‘ключ’); $result = substr($text, $pos + strlen(‘ключ’));. Такой способ работает для извлечения данных из email, URL или идентификаторов.
Когда лучше использовать str_replace вместо preg_match_all?
str_replace подходит для прямой замены подстроки на другой текст без сложных условий. Она быстрее и проще в синтаксисе, если нужно заменить конкретное слово или символ. preg_match_all стоит применять, если требуется искать по шаблону, учитывать повторяющиеся вхождения или извлекать данные по регулярным выражениям. Таким образом, выбор зависит от сложности задачи и объёма обрабатываемого текста.
