PHP如何提取字符串中指定符号第二次出现后的全部字符
需求说明
现有字符串示例:$foo = 'this_is_a_string';
要求:无论字符串长度、内部包含多少个下划线(_),统一提取第二个下划线之后的所有内容,上述示例预期返回结果为"a_string"。
可直接使用的PHP实现方案
以下方案均兼容多下划线场景,同时处理了下划线数量不足2个的边界情况,避免运行报错。
方案1:带分割限制的explode实现(性能最优,最推荐)
利用explode的第三个limit参数,拆分时最多生成3段内容,第三段会自动保留第二个下划线之后的所有内容,不需要额外拼接后续片段,执行效率最高。
$foo = 'this_is_a_string'; $parts = explode('_', $foo, 3); $result = $parts[2] ?? ''; // 下划线不足2个时默认返回空,可按需调整默认值 echo $result; // 输出 a_string
方案2:正则匹配实现
适合需要同时做字符串格式校验的场景,正则规则直接匹配前两段非下划线内容+两个下划线,捕获后续所有内容:
$foo = 'this_is_a_string'; $result = ''; if (preg_match('/^[^_]+_[^_]+_(.*)$/', $foo, $matches)) { $result = $matches[1]; } echo $result; // 输出 a_string
方案3:字符串位置查找截取实现
通过两次定位下划线的位置,直接截取目标子串,没有数组/正则的额外开销:
$foo = 'this_is_a_string'; $result = ''; $firstUnderscorePos = strpos($foo, '_'); if ($firstUnderscorePos !== false) { $secondUnderscorePos = strpos($foo, '_', $firstUnderscorePos + 1); if ($secondUnderscorePos !== false) { $result = substr($foo, $secondUnderscorePos + 1); } } echo $result; // 输出 a_string
边界提示:如果业务场景需要下划线不足2个时返回其他值(比如原字符串、固定提示语),直接修改上述代码里
$result的默认赋值逻辑即可。
内容的提问来源于stack exchange,提问作者MrAmpersand
相关产品推荐
相关产品推荐

