Mb strripos: примеры (PHP)
mb_strripos(string $haystack, string $needle, int $offset = 0, ?string $encoding = null): int|falseФункция mb_strripos выполняет поиск последнего вхождения подстроки в строку с учетом многобайтовых кодировок, не учитывая регистр символов. Она используется при работе с текстами на языках, где символы могут занимать более одного байта (UTF-8, CP1251 и другие).
- haystack (строка) – исходная строка, в которой выполняется поиск.
- needle (строка) – подстрока для поиска.
- offset (целое число, необязательный) – позиция в символах (не в байтах), с которой начинается поиск. Отрицательное значение указывает позицию от конца строки.
- encoding (строка, необязательный) – кодировка строк. Если не указана, используется внутренняя кодировка.
Функция возвращает числовую позицию последнего вхождения подстроки или false при отсутствии совпадений.
echo mb_strripos("Привет, мир!", "МИР");8
echo mb_strripos("тест тест тест", "ТЕСТ", -5);5
echo mb_strripos("Пример строки", "СТРОКИ", 0, "UTF-8");7
- mb_strrpos – поиск последнего вхождения с учетом регистра.
- stripos – поиск первого вхождения без учета регистра, но без поддержки многобайтовых кодировок.
- strripos – поиск последнего вхождения без учета регистра, но без поддержки многобайтовых кодировок.
Функции семейства mb_* предпочтительны при работе с многобайтовыми кодировками. Для однобайтовых кодировок можно использовать аналоги без префикса mb_.
echo mb_strripos("абвгде", "Д", 0, "ASCII");false
Указание неподходящей кодировки может привести к некорректным результатам.
if (mb_strripos("текст", "слово") == false) {
echo "Не найдено";
}Такой код может вызвать проблему, так как позиция 0 также интерпретируется как false. Рекомендуется использовать строгое сравнение ===.
В PHP 8 параметр encoding стал необязательным и может принимать значение null. Также функция теперь выбрасывает исключение ValueError при передаче недопустимого смещения.
$text = "Тест, тест, ТЕСТ";
$needle = "тест";
$lastPos = 0;
$positions = [];
while (($lastPos = mb_strripos($text, $needle, $lastPos)) !== false) {
$positions[] = $lastPos;
$lastPos = $lastPos - mb_strlen($text);
}
print_r($positions);Array
(
[0] => 13
[1] => 7
[2] => 0
)$text = "Русский текст и English text";
$pos_utf8 = mb_strripos($text, "TEXT", 0, "UTF-8");
$pos_cp1251 = mb_strripos(iconv("UTF-8", "CP1251", $text), iconv("UTF-8", "CP1251", "TEXT"), 0, "CP1251");
echo "UTF-8: $pos_utf8, CP1251: $pos_cp1251";UTF-8: 22, CP1251: 22
$text = "café café";
$pos = mb_strripos($text, "CAFÉ");
echo $pos;6
Mb strripos в Python
text = "Пример строки"
position = text.lower().rfind("СТРОКИ".lower())
print(position)7
Mb strripos в Javascript
let text = "Пример строки";
let position = text.toLowerCase().lastIndexOf("СТРОКИ".toLowerCase());
console.log(position);7
Mb strripos в MySQL
SELECT LENGTH('Пример строки') - LOCATE(REVERSE('СТРОКИ'), REVERSE('Пример строки')) + 1;В MySQL нет прямой функции, поиск осуществляется через комбинацию LOCATE и REVERSE.