You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从第二个或第三个分隔符处拆分并获取目标子字符串?

解决你的字符串分割与截取问题

先处理你提到的第一个小需求:从800-555-5555里提取800-555。你已经用explode()把字符串拆成了三个片段,其实只要把前两个片段用分隔符拼回去就搞定啦:

$rawPhoneNumber = "800-555-5555";
$phoneChunks = explode("-", $rawPhoneNumber);
$desiredPhone = $phoneChunks[0] . "-" . $phoneChunks[1]; // 结果就是 800-555

要是怕以后分隔符变了,用implode()结合array_slice()会更灵活:

$desiredPhone = implode("-", array_slice($phoneChunks, 0, 2));

接下来聊你更实际的场景——用指定单词$word做分隔符处理整篇文章,既要统计第二个(或第三个)$word出现位置的字符数,还要获取从第二个匹配点开始到末尾的子串。

拿你给的例子来说:

$text = "oh my god, thank you the lot of downvotes, geniuses *.*";

你注释里写了想要从第二个逗号开始到末尾的内容,但标注的期望结果是oh my god, thank you the lot of downvotes(也就是到第二个逗号之前的部分),我把两种情况都给你说明白:

情况1:获取从第二个分隔符开始到末尾的内容

用explode()的第三个参数限制分割次数,效率更高:

$text = "oh my god, thank you the lot of downvotes, geniuses *.*";
// 用逗号分割,最多分割2次,数组第3项就是从第二个逗号开始到结尾的内容
$explode = explode(",", $text, 3);
$whatiwant = $explode[2]; // 结果是 " geniuses *.*"(前面的空格可以用trim()去掉)

情况2:获取从开头到第二个分隔符之前的内容

也就是你标注的期望结果,把数组前两项拼起来就行:

$text = "oh my god, thank you the lot of downvotes, geniuses *.*";
$explode = explode(",", $text, 3);
$whatiwant = $explode[0] . "," . $explode[1]; // 结果是 "oh my god, thank you the lot of downvotes"

统计分隔符出现位置的字符数

要找第二个(或第N个)分隔符的位置,用strpos()的偏移量参数就可以实现:

$text = "oh my god, thank you the lot of downvotes, geniuses *.*";
$delimiter = ",";

// 找到第一个逗号的位置
$firstPos = strpos($text, $delimiter);
// 从第一个逗号的下一位开始找第二个逗号的位置
$secondPos = strpos($text, $delimiter, $firstPos + 1);

// 第二个逗号出现时的总字符数就是$secondPos的值
echo "第二个逗号的位置是:" . $secondPos;

如果要找第3个、第4个,只要重复这个逻辑,每次从上个分隔符的下一位开始搜索就行。

内容的提问来源于stack exchange,提问作者Galgóczi Levente

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:23:24