PHP中strstr、strrchr、substr、stristr四个函数的区别总结
在PHP开发中,strstr、strrchr、substr和stristr是处理字符串的利器,但因其功能相似容易混淆。strstr返回指定子串及之后的内容(区分大小写),strrchr查找最后一次出现的位置,stristr忽略大小写,而substr则基于字符位置截取而非内容匹配。
一、strstr与strrchr的区别:查找位置不同
strstr与strrchr均用于查找子串并返回从该位置到字符串末尾的内容,核心区别在于查找的方向:
strstr:从左向右扫描,返回第一次找到目标子串及其后的所有内容。strrchr:通常从右向左理解,返回最后一次找到目标子串及其后的所有内容。
第1步:演示 strstr 查找第一个匹配项
strstr适合获取邮箱域名等场景中,首个特定字符出现后的部分。
<?php
$email = 'test@test.com@jb51.net';
// 获取第一个 '@' 之后的所有内容
$domain = strstr($email, '@');
echo "strstr 测试结果: $domain<br>";
?>
输出结果:
strstr 测试结果 @test.com@jb51.net
第2步:演示 strrchr 查找最后一个匹配项
strrchr常用于提取文件名路径中的扩展名或最后一段标识。
<?php
$email = 'test@test.com@jb51.net';
// 获取最后一个 '@' 之后的所有内容
$lastDomain = strrchr($email, '@');
echo "strrchr 测试结果: $lastDomain<br>";
?>
输出结果:
strrchr 测试结果 @jb51.net
二、strstr与stristr的区别:大小写敏感性
两者在功能上都是查找子串并返回剩余部分,关键区别在于对字母大小的处理方式。
strstr:区分大小写。搜索 'a' 不会匹配到 'A'。stristr:不区分大小写。搜索 'a' 能匹配到 'A' 或 'a'。
第3步:验证大小写敏感差异
当待查子串是小写,而目标字符串包含大写时,观察返回值的起始点。
<?php
$email = 'zhangYing@jb51.net';
// 使用区分大小写的 strstr 搜索小写 'y'
$result1 = strstr($email, 'y');
echo "strstr (搜'y'): $result1<br>";
// 使用不区分大小写的 stristr 搜索小写 'y'
$result2 = stristr($email, 'y');
echo "stristr (搜'y'): $result2<br>";
?>
输出结果:
strstr (搜'y'): jb51.net
stristr (搜'y'): Ying@jb51.net
注:由于原字符串中 'Y' 为大写,strstr 未命中,直接跳到了后续的小写 'y' 所在的域名部分;而 stristr 命中了大写的 'Y' 开头。
三、strstr与substr的区别:匹配 vs 定位
这是最容易混淆的一对。虽然它们都能实现“截取”效果,但底层逻辑完全不同。
strstr:基于内容匹配。必须指定要查找的子串(needle),找不到则返回 false。substr:基于位置索引。不需要知道内容是什么,只需知道从第几个字符开始截取,或者距离末尾多少字符。
第4步:对比两种截取方式
假设我们要获取字符串末尾的 '.net'。可以用两种方式实现。
方案 A:使用 strstr (需已知后缀)
<?php
$email = 'zhangYing@jb51.net';
// 查找 '.' 并截取后面部分
$result = strstr($email, '.net');
echo "strstr: $result<br>";
?>
方案 B:使用 substr (基于相对位置)
<?php
$email = 'zhangYing@jb51.net';
// 从倒数第7个字符开始截取(.net长度为4,前面还有@jb5即3个字符,共7位)
$result = substr($email, -7);
echo "substr: $result<br>";
?>
共同输出: jb51.net
建议:如果字符串结构固定且长度已知,substr性能更高且逻辑更简单;如果需要动态识别某个标记符之后的内容,应使用 strstr。
简要总结
掌握这四个函数的关键在于明确你的需求:
1. 找第一个匹配的?用 strstr。
2. 找最后一个匹配的?用 strrchr。
3. 忽略大小写查找?用 stristr。
4. 按字数或索引切分?用 substr。
以上就是PHP中strstr、strrchr、substr、stristr四个函数的区别详细内容,更多关于PHP字符串处理技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









