Поиск фрагмента в строке средствами PHP: от str_contains до сложных примеров
Основные способы проверки наличия подстроки в PHP
Какой самый современный и простой способ?
Начиная с версии PHP 8.0 появилась функция str_contains(). Она принимает строку и подстроку, возвращает true или false. Этот способ самый читаемый и быстрый.
<?php
$haystack = 'PHP is a popular scripting language';
$needle = 'scripting';
if (str_contains($haystack, $needle)) {
echo 'Подстрока найдена';
} else {
echo 'Подстрока не найдена';
}
?>Php маленькие буквы (преобразование строки в нижний регистр в php)
Подстрока найдена
Character php (символы php)
Проблемы: Функция чувствительна к регистру. Не работает в версиях ниже PHP 8.0. Для регистронезависимого поиска требуется другой подход.
Как проверить наличие подстроки в проектах на PHP 7 и ниже?
Функция strpos() возвращает позицию первого вхождения или false. Требуется строгое сравнение с !==.
<?php
$string = 'Hello world';
$sub = 'world';
if (strpos($string, $sub) !== false) {
echo 'Найдено';
} else {
echo 'Не найдено';
}
?>
Php new line (символ новой строки в php)
Найдено
Php проверить строку (проверить строку в php)
Типичная ошибка: Если подстрока находится в начале строки, strpos() возвращает 0. Использование == false приведет к ложному отрицанию. Используйте только !== false.
Как сделать поиск без учета регистра?
Функция stripos() работает аналогично strpos(), но игнорирует регистр символов.
<?php
$text = 'PHP is great';
$search = 'php';
if (stripos($text, $search) !== false) {
echo 'Найдено без учета регистра';
}
?>Php пробел (удаление пробелов в php)
Найдено без учета регистра
удалить html теги php (php удалить html теги)
Проблема: stripos() некорректно работает с многобайтовыми кодировками. Для UTF-8 используйте mb_stripos().
Как проверить подстроку в многобайтовой строке (UTF-8)?
Для UTF-8 и других многобайтовых кодировок применяйте mb_strpos() и mb_stripos() с указанием кодировки.
<?php
$string = 'Привет, мир!';
$sub = 'мир';
if (mb_strpos($string, $sub, 0, 'UTF-8') !== false) {
echo 'Найдено в UTF-8 строке';
}
?>удалить пробел в строке php (php удалить пробелы в строке)
Найдено в UTF-8 строке
Php подстроки (получение подстроки в php)
Без mb_strpos() стандартная strpos() может вернуть некорректную позицию из-за многобайтовых символов. Также настройка mb_internal_encoding() полезна для установки кодировки по умолчанию.
Как выполнить поиск с помощью регулярных выражений?
Функция preg_match() ищет по шаблону и возвращает 1 при совпадении, 0 или false.
<?php
$string = 'Код ошибки: ERR-404';
$pattern = '/ERR-[0-9]{3}/';
if (preg_match($pattern, $string)) {
echo 'Код ошибки обнаружен';
}
?>Php длина строки (длина строки php)
Код ошибки обнаружен
Php str replace (замена в строке php)
Регулярные выражения медленнее и сложнее в отладке. Используйте только когда нужна гибкость (например, поиск по шаблону). Не забывайте экранировать специальные символы.
Как подсчитать количество вхождений подстроки?
substr_count() возвращает число непересекающихся вхождений подстроки.
<?php
$data = 'abacabadabacaba';
$count = substr_count($data, 'aba');
echo 'Количество: ' . $count;
?>Php без учета регистра (игнорирование регистра в php)
Количество: 3
Str search php (поиск в строке php)
substr_count() не учитывает перекрытия. Например, в строке 'aaaa' подстрока 'aa' будет найдена 2 раза, а не 3. Для подсчета с перекрытиями требуется ручной алгоритм.
Как проверить наличие подстроки с помощью strstr?
strstr() возвращает часть строки от первого вхождения подстроки до конца, или false.
<?php
$email = 'user@example.com';
$domain = '@';
if (strstr($email, $domain) !== false) {
echo 'Email содержит символ @';
}
?>Php первые символов (получение первых символов строки в php)
Email содержит символ @
strstr() может быть менее эффективна, чем strpos(), если нужен только булев результат, так как она возвращает подстроку.
Продвинутые примеры использования функций поиска подстроки
Пример 1: регистронезависимый поиск с поддержкой UTF-8
Комбинируем mb_stripos() для поиска без учета регистра в строке с кириллицей.
<?php
$text = 'Программирование на PHP';
$needle = 'php';
if (mb_stripos($text, $needle, 0, 'UTF-8') !== false) {
echo 'Найдено: ' . $needle;
} else {
echo 'Не найдено';
}
?>
Найдено: php
Пример 2: проверка наличия одного из нескольких вариантов
Если нужно проверить, содержит ли строка хотя бы одну из нескольких подстрок, используйте цикл.
<?php
$string = 'Пользователь хочет купить ноутбук';
$keywords = ['ноутбук', 'телефон', 'планшет'];
$found = false;
foreach ($keywords as $word) {
if (str_contains($string, $word)) {
$found = true;
break;
}
}
echo $found ? 'Один из ключевых слов найден' : 'Ничего не найдено';
?>
Один из ключевых слов найден
Пример 3: поиск с использованием регулярных выражений и границ слова
Чтобы найти слово целиком, используйте границу слова \b.
<?php
$string = 'PHP is great but also has phar';
$pattern = '/\bPHP\b/';
if (preg_match($pattern, $string)) {
echo 'Слово PHP найдено';
} else {
echo 'Слово PHP не найдено';
}
?>
Слово PHP найдено
Без границ слова preg_match('/PHP/', $string) также найдёт 'phar' (частично).
Пример 4: получение позиции подстроки с помощью strpos
Иногда нужна не только проверка, но и позиция.
<?php
$string = 'The quick brown fox jumps over the lazy dog';
$needle = 'fox';
$pos = strpos($string, $needle);
if ($pos !== false) {
echo "Подстрока 'fox' найдена на позиции $pos";
} else {
echo 'Не найдено';
}
?>
Подстрока 'fox' найдена на позиции 16
Пример 5: использование str_contains в выражении match (PHP 8)
str_contains отлично сочетается с современными конструкциями.
<?php
$url = 'https://example.com/products';
$result = match (true) {
str_contains($url, '/products') => 'Страница товаров',
str_contains($url, '/about') => 'О компании',
default => 'Другая страница'
};
echo $result;
?>
Страница товаров
Пример 6: поиск подстроки в массиве строк
Используем array_filter с str_contains для фильтрации.
<?php
$fruits = ['яблоко', 'банан', 'апельсин', 'яблочный сок'];
$needle = 'яблок';
$filtered = array_filter($fruits, function($item) use ($needle) {
return str_contains($item, $needle);
});
print_r($filtered);
?>
Array
(
[0] => яблоко
[3] => яблочный сок
)
Пример 7: проверка наличия подстроки с игнорированием пробелов
Иногда нужно удалить пробелы перед проверкой.
<?php
$input = ' PHP 8.0 ';
$needle = 'PHP';
$clean = str_replace(' ', '', $input);
if (str_contains($clean, $needle)) {
echo 'Найдено после удаления пробелов';
}
?>
Найдено после удаления пробелов