我有一个看起来像这样的字符串:1d20+3d6-4d8+10我想把它分成:1d20, +3d6, -4d8, +10.preg_split()消耗+和-符号。告诉它“分裂这些符号,但不消耗它们”的最佳方式是什么?我可以蛮力解决方案,但我猜 PHP 标准库中有一个我不熟悉的简单解决方案。
2 回答
jeck猫
TA贡献1909条经验 获得超7个赞
+您可以使用分隔符 (或)的零宽度前瞻来拆分-:
$string = '1d20+3d6-4d8+10';
print_r(preg_split('/(?=[+-])/', $string));
输出:
Array
(
[0] => 1d20
[1] => +3d6
[2] => -4d8
[3] => +10
)
慕神8447489
TA贡献1780条经验 获得超1个赞
如果您将分隔符放在捕获组中,它们将包含在preg_split()
结果中,但作为单独的元素。所以你会得到
["1d20", "+", "3d6", "-", "4d8", "+", "10"]
另一种选择是使用preg_match_all()
而不是preg_split()
,并使运算符成为匹配项目的正则表达式开头的可选模式。
preg_match_all('/[-+]?[^-+]+/', $string, $matches);
- 2 回答
- 0 关注
- 107 浏览
添加回答
举报
0/150
提交
取消