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

如何使用preg_split分割字符串且不丢失字符?

解决preg_split分割时丢失单词首字符的问题

你遇到的问题根源在于正则表达式/;\w/的匹配逻辑:它会把分号+紧跟的单词字符(比如示例里的;H)整个作为分隔符,而preg_split会直接移除匹配到的分隔符内容,所以H就跟着分号一起被删掉了,才会出现Hey变成ey的情况。

要避免丢失后续的单词字符,我们需要用零宽断言来精准定位分割位置,同时不消耗后面的单词字符,有两种方案可选:

方案1:移除分号,仅在分号后紧跟单词时分割

如果你希望分割后分号被去掉,得到["Hello; how are you", "Hey, I am fine"]这种结果,使用带正向先行断言的正则:

$string = "Hello; how are you;Hey, I am fine";
$new = preg_split("/;(?=\w)/", $string);
print_r($new);

这里的(?=\w)是正向先行断言,它只会检查分号后面是否紧跟单词字符,但不会把这个单词字符包含在匹配的分隔符里。preg_split只会移除分号,保留后面的H,完全符合你的需求。

方案2:保留分号,在分号和单词之间分割

如果你希望分号留在前一个元素中(比如得到["Hello; how are you;", "Hey, I am fine"]),可以用零宽断言匹配分号和单词字符之间的位置:

$string = "Hello; how are you;Hey, I am fine";
$new = preg_split("/(?<=;)(?=\w)/", $string);
print_r($new);

这里(?<=;)是正向后顾断言(检查前面是分号),(?=\w)是正向先行断言(检查后面是单词字符),分割的位置是两者之间,不会移除任何字符,只是把字符串在这个位置切开。

执行方案1的代码后,输出结果如下:

Array
(
    [0] => Hello; how are you
    [1] => Hey, I am fine
)

内容的提问来源于stack exchange,提问作者Nemo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:39