
本文介绍如何使用 PHP 的 stripos() 和 substr() 函数精准定位并提取字符串中第二次出现某分隔符(如下划线 _)之后的子串,适用于动态长度和任意数量分隔符的场景。
本文介绍如何使用 php 的 `stripos()` 和 `substr()` 函数精准定位并提取字符串中第二次出现某分隔符(如下划线 `_`)之后的子串,适用于动态长度和任意数量分隔符的场景。
在实际开发中,我们常需从类似 this_is_a_string 这样的下划线命名格式中提取“第二段之后”的部分(即 "a_string")。关键在于:跳过第一个 _,找到第二个 _ 的位置,再截取其后全部内容。
PHP 提供了 stripos()(不区分大小写的字符串查找)和 substr()(子串提取)组合方案,无需正则、高效简洁。核心思路是嵌套调用 stripos():
- 第一次 stripos($foo, '_') 找到首个 _ 的索引;
- 第二次 stripos($foo, '_', $offset) 从首个 _ 后一位开始搜索,定位第二个 _;
- 最后用 substr($foo, $second_underscore_pos + 1) 提取后续全部字符。
示例代码如下:
<?php $foo = 'this_is_a_string';
$firstPos = stripos($foo, '_');
if ($firstPos === false) {
echo "未找到下划线";
} else {
$secondPos = stripos($foo, '_', $firstPos + 1);
if ($secondPos === false) {
echo "未找到第二个下划线";
} else {
$result = substr($foo, $secondPos + 1);
echo $result; // 输出:a_string
}
}
?>
⚠️ 注意事项:
- stripos() 返回 false 表示未找到,必须显式判断(不能用 == false,因索引 0 也是合法位置);
- 若字符串中 _ 少于两个,直接调用嵌套 stripos() 会触发警告(Warning: stripos(): Offset not contained in string),因此建议加入容错判断;
- 如需严格区分大小写,改用 strpos() 替代 stripos();
- 若目标是提取“第二与第三次 _ 之间”的内容,或“第二 _ 到末尾前最后一个 _”之间的内容,则需进一步结合 strrpos() 或正则表达式处理。
该方法时间复杂度为 O(n),无额外依赖,是处理此类分隔符截取任务的轻量级首选方案。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











