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

我有一个看起来像这样的字符串:

1d20+3d6-4d8+10

我想把它分成:

1d20+3d6-4d8+10.

preg_split()消耗+-符号。告诉它“分裂这些符号,但不消耗它们”的最佳方式是什么?我可以蛮力解决方案,但我猜 PHP 标准库中有一个我不熟悉的简单解决方案。


不负相思意
浏览 108回答 2
2回答

jeck猫

+您可以使用分隔符 (或)的零宽度前瞻来拆分-:$string = '1d20+3d6-4d8+10';print_r(preg_split('/(?=[+-])/', $string));输出:Array(    [0] => 1d20    [1] => +3d6    [2] => -4d8    [3] => +10)

慕神8447489

如果您将分隔符放在捕获组中,它们将包含在preg_split()结果中,但作为单独的元素。所以你会得到["1d20", "+", "3d6", "-", "4d8", "+", "10"]另一种选择是使用preg_match_all()而不是preg_split(),并使运算符成为匹配项目的正则表达式开头的可选模式。preg_match_all('/[-+]?[^-+]+/', $string, $matches);
打开App,查看更多内容
随时随地看视频慕课网APP