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

通过正则表达式拆分字符串而不使用分隔符?

通过正则表达式拆分字符串而不使用分隔符?

PHP
不负相思意 2022-07-22 17:01:05
我有一个看起来像这样的字符串: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

)


查看完整回答
反对 回复 2022-07-22
?
慕神8447489

TA贡献1780条经验 获得超1个赞

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

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

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

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


查看完整回答
反对 回复 2022-07-22
  • 2 回答
  • 0 关注
  • 107 浏览

添加回答

举报

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