如何从第二个或第三个分隔符处拆分并获取目标子字符串?
解决你的字符串分割与截取问题
先处理你提到的第一个小需求:从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
相关产品推荐
相关产品推荐

