strrpos是PHP中查找字符串最后一次出现位置的函数,返回从0开始的索引值,未找到返回false;区分大小写,可用strripos忽略大小写;使用时需检查返回值避免错误。

strrpos 是 PHP 中用于查找字符串中某个字符或子串最后一次出现位置的函数,返回的是从 0 开始的索引值(不是第几个字符),找不到时返回 false。
基本用法:找最后一个指定字符
最常见场景是找文件扩展名、路径分隔符、邮箱 @ 符号等最后出现的位置:
- 语法:strrpos($haystack, $needle)
- $haystack 是被搜索的字符串,$needle 是要找的字符或子串(长度至少为 1)
- 注意:不能用空字符串作为 $needle,否则会触发警告并返回 false
例如:
$path = '/var/www/html/index.php'; $last_slash = strrpos($path, '/'); // 返回 12(最后一个 / 的位置) $ext_pos = strrpos($path, '.'); // 返回 20(最后一个 . 的位置)
处理大小写敏感问题
strrpos 区分大小写。如果想忽略大小写,改用 strripos:
立即学习“PHP免费学习笔记(深入)”;
- strripos('Hello World', 'o') → 返回 7(最后一个 o,不区分大小写)
- strrpos('Hello World', 'O') → 返回 false(大写 O 不存在)
安全获取子串(比如取扩展名)
直接用 strrpos 做截取时,必须检查返回值是否为 false,避免误把 false 当 0 处理:
- 错误写法:
substr($file, strrpos($file, '.'))—— 如果没找到点,strrpos 返回 false,substr 会报错或行为异常 - 正确写法:
$pos = strrpos($file, '.'); if ($pos !== false) { $ext = substr($file, $pos); }
更稳妥的扩展名提取示例:
$filename = 'archive.tar.gz'; $dot_pos = strrpos($filename, '.'); $extension = ($dot_pos !== false) ? substr($filename, $dot_pos + 1) : '';
结果:gz(只取点之后的部分)
支持偏移量(从指定位置往前搜)
第三个可选参数 $offset 表示从字符串的哪个位置开始向左搜索(即限制搜索范围):
- 正数 offset:从开头起第几个字符开始向后搜(但 strrpos 仍找“最后出现”,所以实际是限制搜索的起始位置,不是结束位置)
- 负数 offset:从末尾倒数第几个字符开始向前搜(更常用)
例如:
$text = 'a.b.c.d.txt'; // 找倒数 5 个字符范围内最后一个 '.' $pos = strrpos($text, '.', -5); // 在 'd.txt' 中找,返回 8(对应 d 后面的 .)



















