PHP 查找与截取字符串常用函数详解

陆景行
陆景行
发布时间:2026-10-15| 7人浏览过
原创

在处理 PHP 数据时,准确提取或查找字符串片段是基础且高频的需求。本文系统梳理了 strstr、strpos、substr 等核心函数的用法,通过真实代码示例展示如何结合偏移量、长度及大小写敏感选项,高效解决字符定位与子串截取问题。

精确查找首次出现位置

在字符串操作中,最常见的任务之一是确定某个子串(needle)是否在主串(haystack)中,并获取其位置。PHP 提供了多种相关函数,其中 strpos 是最基础的按位置返回的函数。

第1步:使用 strpos 获取索引

strpos 函数用于查找字符串在另一个字符串中首次出现的位置。返回值是从 0 开始的整数索引;如果未找到则返回 false。

  • 目的:确定子串在源串中的绝对位置。
  • 关键参数:$offset 可选参数,指定从哪个位置开始搜索。
  • 注意:该函数严格区分大小写。
<?php
$email = 'yuxiaoxiao@example.com';
$position = strpos($email, '@');
if ($position !== false) {
    echo "'@' 位于位置: " . $position;
}
?>

若需忽略大小写,可使用 stripos 函数,其逻辑与 strpos 一致,但匹配过程不区分字母大小写。

基于位置的子串提取

确定位置后,通常需要将目标部分从原字符串中“切”出来。strstr 和 substr 是实现这一目标的两大主力,二者侧重点不同。

第2步:使用 strstr 提取后续部分

strstr 类似于 C 语言中的 strdup 行为,它返回从 needle 第一次出现的位置开始到字符串末尾的子串。它的独特优势在于第三个布尔参数 $before_needle。

  • 参数:将 $before_needle 设为 true 时,将返回 needle 之前的部分。
  • 非字符串处理:如果 needle 不是字符串,将被视为整形作为 ASCII 字符的序号处理。
<?php
$email = 'yuxiaoxiao@example.com';
// 提取 @ 之后的域名
$domain = strstr($email, '@');
echo $domain; // 输出 @example.com

// 提取 @ 之前的用户名 (PHP 5.3+)
$user = strstr($email, '@', true);
echo $user;   // 输出 yuxiaoxiao
?>

同样地,stristr 是 strstr 的不区分大小写版本,适用于需要忽略大小写差异的提取场景。

第3步:使用 substr 进行灵活截取

如果说 strstr 是按内容找边界,那么 substr 则是按坐标切蛋糕。它能根据起始位置和长度精确控制截取范围。

参数规则:

  • $start (正数):从第 $start 位开始(从 0 计数)。
  • $start (负数):从字符串末尾向前数第 |$start| 位开始。
  • $length:指定截取的长度。若省略,默认截取至结尾;若为负数,表示从结束处截掉这么长。

重要提示:如果 $start 超出字符串范围,将返回 false;如果长度为 0、false 或 null,则返回空字符串。

<?php
$rest = substr("abcdef", 0, -1); // 返回 "abcde" (截去最后一个)
$rest = substr("abcdef", 2, -1); // 返回 "cde"
$rest = substr("abcdef", -3, -1); // 返回 "de" (倒数第三位开始,直到倒数第二位)
$rest = substr("abcdef", 4, -4);  // 返回 "" (起始点越界或有效长度为 0)
?>

反向查找与特定字符操作

有时候我们需要从后往前查找,或者针对特定分隔符(如路径后缀)进行操作,以下函数能提供便利。

第4步:使用 strrchr 查找最后一次出现的字符

strrchr 主要用于文件路径处理。它在 haystack 中查找 needle(通常是一个字符),并返回从 needle 最后一次出现的位置到末尾的部分。

  • 典型应用:获取文件扩展名(例如从路径中提取 .txt)。

第5步:利用 strrpos 定位最后位置

如果需要知道这个“最后一次出现”的确切数字索引(而非字符串片段),应使用 strrpos。它的逻辑与 strpos 相反,从末尾向前搜索。

  • 忽略大小写版:strripos,功能同 strrpos,但不区分大小写。

对比总结:
- 查位置:用 strpos/strrpos。- 取后半段:用 strstr/strrchr。- 精调截取:用 substr。

以上就是 PHP 查找与截取字符串常用函数的详细内容,更多关于 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 算法库。