
本文介绍如何使用 PHP 内置函数精准截取字符串中第二次出现某分隔符(如下划线 _)之后的全部内容,适用于动态长度和任意数量分隔符的场景。
本文介绍如何使用 php 内置函数精准截取字符串中第二次出现某分隔符(如下划线 `_`)之后的全部内容,适用于动态长度和任意数量分隔符的场景。
在实际开发中,我们常需从类似 this_is_a_string 这样的命名风格字符串中提取特定段落——例如获取“第二个下划线之后的所有内容”。不同于简单的 explode() 分割(易受空段或多余分隔符干扰),更健壮的做法是利用字符串定位函数组合实现精确偏移截取。
核心思路是:
- 第一次调用 stripos($foo, '_') 找到首个 _ 的位置;
- 第二次调用 stripos($foo, '_', $firstPos + 1) 从首个位置后继续搜索,定位第二个 _;
- 使用 substr($foo, $secondPos + 1) 截取该位置之后的全部子串。
以下是完整示例代码:
<?php $foo = 'this_is_a_string';
$firstUnderscore = stripos($foo, '_');
if ($firstUnderscore === false) {
echo "未找到第一个 '_',无法继续";
} else {
$secondUnderscore = stripos($foo, '_', $firstUnderscore + 1);
if ($secondUnderscore === false) {
echo "未找到第二个 '_',返回空字符串";
$result = '';
} else {
$result = substr($foo, $secondUnderscore + 1);
}
}
var_dump($result); // string(8) "a_string"
?>
✅ 注意事项:
- 使用 stripos() 而非 strpos() 可避免大小写敏感问题(虽 _ 无大小写,但此写法更具通用性);
- 务必检查每次 stripos() 返回值是否为 false,防止因分隔符不足导致逻辑错误;
- 若需支持多字节字符(如中文路径、UTF-8 标识符),应改用 mb_strpos() 和 mb_substr() 并指定编码,例如 mb_strpos($foo, '_', 0, 'UTF-8');
- 此方法时间复杂度为 O(n),性能优于正则(尤其在长字符串中),且无需额外依赖。
总结:通过嵌套 stripos() 定位 + substr() 截取,可高效、可靠地提取“第二次出现某符号之后”的子串,是处理蛇形命名(snake_case)、路径解析或协议字段提取等场景的推荐实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











