W3docs

strripos()

Функция strripos() в PHP находит позицию последнего вхождения подстроки без учёта регистра. Синтаксис, параметры и примеры.

Введение

Функция strripos() в PHP находит позицию последнего вхождения подстроки внутри другой строки, игнорируя регистр. Название расшифровывается как str (string, строка) + r (reverse, поиск справа) + i (case-insensitive, без учёта регистра) + pos (position, позиция).

Это нечувствительный к регистру аналог strrpos(): strripos("Hello", "L") и strripos("Hello", "l") возвращают одинаковую позицию, тогда как strrpos() считает L и l разными символами.

В этой главе рассматриваются синтаксис, возвращаемое значение (и подводный камень с false, от которого нужно защищаться), необязательный параметр $offset — включая отрицательные смещения — а также связь strripos() с другими функциями поиска по строке.

Синтаксис

strripos(string $haystack, string $needle, int $offset = 0): int|false
ПараметрОписание
$haystackСтрока, в которой выполняется поиск.
$needleПодстрока, которую нужно найти.
$offsetНеобязательный. Позиция начала поиска. Положительное значение пропускает первые $offset символов; отрицательное останавливает поиск за столько символов до конца строки. По умолчанию 0.

Возвращаемое значение: индекс (начиная с нуля) последнего найденного вхождения или false, если $needle не найдена.

Всегда используйте сравнение с !==

strripos() возвращает 0, когда совпадение находится в самом начале строки, а 0 в PHP является ложным значением. Нестрогая проверка вроде if (strripos(...)) ошибочно воспримет совпадение на нулевой позиции как «не найдено». Всегда сравнивайте с false с помощью строгого оператора !==:

<?php

$haystack = "Apple pie";
$pos = strripos($haystack, "a"); // matches "A" at index 0

if ($pos !== false) {
  echo "Found at index $pos"; // Found at index 0
} else {
  echo "Not found";
}

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

php— editable, runs on the server

В строке Hello World есть два символа o/O — один в Hello (индекс 4) и один в World (индекс 7). Поскольку strripos() возвращает последнее совпадение, вывод будет таким:

Found last occurrence of 'o' in 'Hello World' at position 7

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

Поиск считает строчные и заглавные буквы равными, поэтому регистр $needle не имеет значения:

<?php

$string = "Hello World, hello PHP";

echo strripos($string, "hello"), "\n"; // 13 — matches "hello" in "hello PHP"
echo strripos($string, "HELLO"), "\n"; // 13 — same match, case ignored

Последнее hello/HELLO/Hello в строке начинается с индекса 13, независимо от того, как вы напишете искомую строку.

Использование параметра $offset

Положительное смещение начинает поиск после первых $offset символов:

<?php

$string = "Hello World";

echo strripos($string, "o", 5), "\n"; // 7 — only the "o" in "World" is considered

Отрицательное смещение останавливает поиск за столько символов до конца строки — это удобно для нахождения последнего совпадения во всём тексте кроме завершающей части:

<?php

$string = "abcabc";

echo strripos($string, "b", -2), "\n"; // 4 — last "b" within the truncated search window

Связанные функции

Выбирайте подходящую функцию поиска для конкретной задачи:

  • strrpos() — то же, что strripos(), но с учётом регистра.
  • stripos() — находит первое вхождение без учёта регистра.
  • strpos() — находит первое вхождение с учётом регистра.
  • strstr() — возвращает остаток строки начиная с первого совпадения, а не позицию.
  • substr() — извлекает часть строки, когда позиция уже известна.
ФункцияНаправлениеС учётом регистра?
strpos()первое совпадениеда
stripos()первое совпадениенет
strrpos()последнее совпадениеда
strripos()последнее совпадениенет

Заключение

strripos() находит позицию последнего вхождения подстроки без учёта регистра и возвращает её индекс или false, если совпадений нет. Не забывайте проверять результат через !==, чтобы совпадение на нулевой позиции не было ошибочно принято за неудачу, и используйте $offset (положительный или отрицательный), когда нужно ограничить область поиска. Если требуется найти первое вхождение или важен регистр — воспользуйтесь одной из связанных функций выше.

Практика

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