为了账号安全,请及时绑定邮箱和手机立即绑定

在不消耗分隔符的情况下按正则表达式拆分字符串?

在不消耗分隔符的情况下按正则表达式拆分字符串?

PHP
白衣染霜花 2022-08-05 15:37:12
我有一个字符串,如下所示:1d20+3d6-4d8+10我想把它分成:1d20, , , .+3d6-4d8+10preg_split()使用 和 符号。告诉它“分裂这些符号,但不要消费它们”的最好方法是什么?我可以暴力破解一个解决方案,但我猜PHP标准库中有一个我不熟悉的简单解决方案。+-
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

您可以使用零宽度的前瞻分隔符( 或 ):+-


$string = '1d20+3d6-4d8+10';

print_r(preg_split('/(?=[+-])/', $string));

输出:


Array

(

    [0] => 1d20

    [1] => +3d6

    [2] => -4d8

    [3] => +10

)

3v4l.org 演示


查看完整回答
反对 回复 2022-08-05
?
POPMUISE

TA贡献1765条经验 获得超5个赞

如果将分隔符放在捕获组中,它们将包含在结果中,但作为单独的元素。所以你会得到preg_split()

["1d20", "+", "3d6", "-", "4d8", "+", "10"]

另一种选择是使用 代替 ,并使运算符成为正则表达式开头与项匹配的可选模式。preg_match_all()preg_split()

preg_match_all('/[-+]?[^-+]+/', $string, $matches);


查看完整回答
反对 回复 2022-08-05
  • 2 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信