PHP中strstr、strrchr、substr、stristr四个函数的区别总结

Miles
Miles
发布时间:2026-10-14| 2人浏览过
原创

在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字符串处理技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。