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

PHP preg_split()问题:不分割单引号内的空格

解决单引号内内容不被拆分的正则分割方案

嘿,这个需求很常见!要实现分割时保留单引号包裹内容的完整性,我们只需要调整正则表达式,让它优先匹配单引号内的内容,再处理外部的分隔符。

修改后的代码

$string = "My name is Emma and i have a dillemma, what's the distance between 'New York' and 'Athene' ?";
$split = preg_split(
    '/\'[^\']+\'|\s+|(,|[<>!]?=|<>=?|>)/',
    $string,
    null,
    PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
);

print_r($split);

正则表达式解释

我们给原正则加了最优先的分支 \'[^\']+\':

  • \':匹配开头的单引号(转义是为了在PHP字符串中正确解析)
  • [^\']+:匹配任意非单引号的字符(确保不会匹配到闭合的单引号)
  • \':匹配结尾的单引号
  • 剩下的 \s+|(,|[<>!]?=|<>=?|>) 和你原来的规则一致,负责匹配外部的空格和运算符分隔符

运行结果

执行后得到的数组会完整保留单引号内的内容,不会拆分里面的空格:

Array
(
    [0] => My
    [1] => name
    [2] => is
    [3] => Emma
    [4] => and
    [5] => i
    [6] => have
    [7] => a
    [8] => dillemma
    [9] => ,
    [10] => what's
    [11] => the
    [12] => distance
    [13] => between
    [14] => 'New York'
    [15] => and
    [16] => 'Athene'
    [17] => ?
)

补充说明

如果你的场景中存在嵌套单引号(比如 'He said \'hello\''),这个正则就不适用了,需要调整为支持转义单引号的版本:/'(?:\\'|[^'])*'/。不过从你的示例字符串来看,目前的正则已经完全满足需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:15:23