/
Вопросы и ответы
/
PHP
/

Какая функция в php позволяет найти вхождение подстроки?

Какая функция в php позволяет найти вхождение подстроки?

4 года назад

Andrey Moshkov

Ответы

1

В PHP для поиска вхождения подстроки в строке можно использовать функцию strpos(). Она возвращает позицию первого вхождения подстроки в строку, или false, если подстрока не найдена.

Пример использования функции strpos():

1
2
3
4
5
6
7
8
9
10
$string = "Hello, world!";
$substring = "world";

$position = strpos($string, $substring);

if ($position !== false) {
    echo "Подстрока найдена на позиции: " . $position;
} else {
    echo "Подстрока не найдена";
}

В данном примере мы ищем подстроку "world" в строке "Hello, world!". Функция strpos() вернет позицию 7, так как подстрока "world" начинается с 7-го символа в строке.

Также можно использовать функцию stripos(), которая выполняет поиск без учета регистра символов.

3 года назад

Olga Pejenkova

0

Для поиска вхождения подстроки в PHP можно использовать функцию strpos(). Она возвращает позицию первого вхождения подстроки в строку или false если подстрока не найдена.

Также можно воспользоваться другими функциями. Взято с сайта https://www.php.net

1
2
3
4
5
6
7
8
9
10
stripos() - Возвращает позицию первого вхождения подстроки без учёта регистра
str_contains() - Определяет, содержит ли строка заданную подстроку
str_ends_with() - Проверяет, заканчивается ли строка заданной подстрокой
str_starts_with() - Проверяет, начинается ли строка с заданной подстроки
strrpos() - Возвращает позицию последнего вхождения подстроки в строке
strripos() - Возвращает позицию последнего вхождения подстроки без учёта регистра
strstr() - Находит первое вхождение подстроки
strpbrk() - Ищет в строке любой символ из заданного набора
substr() - Возвращает подстроку
preg_match() - Выполняет проверку на соответствие регулярному выражению

4 года назад

Аслан Аутлев

0

Позицию подстроки возвращает strpos(). Если подстроки нет, функция вернёт false:

1
2
$pos = strpos('Hello, world', 'world');
var_dump($pos);  // int(7)

Чтобы только проверить, есть ли подстрока, в PHP 8 используют str_contains():

1
2
3
if (str_contains('Hello, world', 'world')) {
    echo 'Найдено';
}

Главная ошибка со strpos

Позиции считаются с нуля. Если подстрока стоит в начале, strpos() вернёт 0, а 0 в условии считается ложью:

1
2
3
if (strpos('world map', 'world')) {
    echo 'Найдено';   // не выполнится: strpos вернул 0
}

Сравнивайте строго с false:

1
2
3
if (strpos('world map', 'world') !== false) {
    echo 'Найдено';   // выполнится
}

Функции поиска

ФункцияЧто делаетПример → результат
strpos($s, $sub)позиция первого вхожденияstrpos('abcabc', 'c') → 2
stripos($s, $sub)то же без учёта регистраstripos('Hello', 'h') → 0
strrpos($s, $sub)позиция последнего вхожденияstrrpos('abcabc', 'c') → 5
str_contains($s, $sub)есть ли подстрока, PHP 8+true или false
str_starts_with, str_ends_withначинается или заканчивается ли строка подстрокой, PHP 8+true или false
substr_count($s, $sub)сколько раз встречаетсяsubstr_count('abcabc', 'c') → 2
strstr($s, $sub)часть строки от первого вхожденияstrstr('user@mail.ru', '@') → '@mail.ru'

Поиск без учёта регистра

1
var_dump(stripos('Hello, World', 'world'));  // int(7)

Для кириллицы используйте mb_stripos(): stripos понимает регистр только латинских букв.

Русский текст

strpos() считает позицию в байтах. Русская буква в UTF-8 занимает 2 байта, поэтому позиция получится в два раза больше ожидаемой:

1
2
var_dump(strpos('Привет, мир', 'мир'));     // int(14)
var_dump(mb_strpos('Привет, мир', 'мир'));  // int(8)

Для проверки наличия подстроки это не важно. Если позицию передают в substr(), используйте пару mb_strpos() и mb_substr().

Поиск по шаблону

Для поиска по шаблону, например номера телефона, используйте preg_match():

1
2
3
if (preg_match('/\d{3}-\d{2}-\d{2}/', 'Тел.: 123-45-67', $m)) {
    echo $m[0];  // 123-45-67
}

Строки и функции PHP разбирают в бесплатном курсе «Основы PHP», язык целиком — на профессии «PHP-разработчик».

18 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845