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";
}Базовый пример
В строке 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 (положительный или отрицательный), когда нужно ограничить область поиска. Если требуется найти первое вхождение или важен регистр — воспользуйтесь одной из связанных функций выше.