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

Php 用正则表达式拆分字符串而不使用分隔符?,php,Php,我有一个字符串如下所示: 1d20+3d6-4d8+10 我想将其分为: 1d20,+3d6,-4d8,+10 preg_split()使用+和-符号。告诉它“在这些符号前分开,但不要消费它们”的最佳方式是什么?我可以强制执行一个解决方案,但我猜PHP标准库中有一个简单的解决方案我不熟悉 您可以使用零宽度前瞻分隔符(+或-)进行拆分: 输出: Array ( [0] => 1d20 [1] => +3d6 [2] => -4d8 [3] =>

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

1d20+3d6-4d8+10

我想将其分为:

1d20
+3d6
-4d8
+10


preg_split()
使用
+
-
符号。告诉它“在这些符号前分开,但不要消费它们”的最佳方式是什么?我可以强制执行一个解决方案,但我猜PHP标准库中有一个简单的解决方案我不熟悉

您可以使用零宽度前瞻分隔符(
+
-
)进行拆分:

输出:

Array
(
    [0] => 1d20
    [1] => +3d6
    [2] => -4d8
    [3] => +10
)

您可以使用零宽度前瞻分隔符(
+
-
)进行拆分:

输出:

Array
(
    [0] => 1d20
    [1] => +3d6
    [2] => -4d8
    [3] => +10
)

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

["1d20", "+", "3d6", "-", "4d8", "+", "10"]
另一个选项是使用
preg\u match\u all()
而不是
preg\u split()
,并在regexp的开头使操作符成为与项目匹配的可选模式

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

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

["1d20", "+", "3d6", "-", "4d8", "+", "10"]
另一个选项是使用
preg\u match\u all()
而不是
preg\u split()
,并在regexp的开头使操作符成为与项目匹配的可选模式

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

取决于您如何定义这些符号,即数学运算符的符号?仅+和-。preg_split(“/([+-])/”…)是我当前的代码,它的拆分非常完美,只不过它使用了+和-。这取决于您如何定义这些符号,即数学运算符的符号?只有+和-。preg_split(“/([+-])/”…)是我当前的代码,它完成了完美的分割,只不过它消耗了+和-。