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

PHP使用preg_split拆分字符串:拆分等号的正则优化求助

解决正则拆分等号的问题

看起来你已经快搞定了,问题出在原来的正则只匹配紧跟在{...}块后面的等号,而测试字符串里最后的等号是跟在)后面,所以没被拆分出来。

我帮你调整了正则表达式,让顶级的等号不管前面是什么,都能被单独拆分,同时保留你原来对{...}块和后续符号的处理逻辑:

$logical_test = "({1+1=2|2+2=4}+{1+2=3|2+3=5})=16+10";
$logical_test_parts = preg_split("/({.+?})([\)|\+])|(=)/", $logical_test, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
print_r($logical_test_parts);

这个正则的逻辑是:

  • 第一个分支({.+?})([\)|\+]):继续捕获{...}块,以及紧跟在它后面的)或+符号;
  • 第二个分支(=):单独捕获所有顶级的等号(不在{...}内部的等号),这样就能把最后的=和后面的16+10拆分开。

运行这段代码后,你会得到想要的结果:

Array
(
    [0] => (
    [1] => {1+1=2|2+2=4}
    [2] => +
    [3] => {1+2=3|2+3=5}
    [4] => )
    [5] => =
    [6] => 16+10
)

这样索引5就是单独的=,索引6是完整的16+10,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:10:00