猿问

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

我有一个字符串,如下所示:

1d20+3d6-4d8+10

我想把它分成:

1d20, , , .+3d6-4d8+10

preg_split()使用 和 符号。告诉它“分裂这些符号,但不要消费它们”的最好方法是什么?我可以暴力破解一个解决方案,但我猜PHP标准库中有一个我不熟悉的简单解决方案。+-


白衣染霜花
浏览 124回答 2
2回答

MMTTMM

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

POPMUISE

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