Preg_split捕获了数组中的所有结果

时间:2012-02-13 15:07:59

标签: php regex delimiter preg-split

我在php

中的函数preg_split有问题

我的正则表达式是

#^(-?[0-9]+)(([+x])(-?[0-9]+))*$#

我想要例如转换:

-5+69x45

在像这样的数组中

{
[0] = -5
[1] = +
[2] = 69
[3] = x
[4] = 45
}

我的正则表达式工作和数学与preg_match

但是使用preg split我没有我的数组

我有一个没有标志或

的空数组
{
[0] = -5
[1] = x
[2] = 45
}

标志为PREG_SPLIT_DELIM_CAPTURE

我的错误在哪里?

2 个答案:

答案 0 :(得分:1)

我认为你误解了preg_split

您定义的模式用于分割字符串,但这意味着字符串中与您的模式匹配的那些部分不包含在结果数组中。

使用标记PREG_SPLIT_DELIM_CAPTURE将捕获组的内容添加到结果数组(preg_spit doc)。

#^(-?[0-9]+)(([+x])(-?[0-9]+))*$#
            ^^^^^^^^^^^^^^^^^^

但是你的两个最后一组有一个量词,这意味着$ 2和$ 3只是存储的最后一个匹配,并且该组的第一个匹配“+69”被覆盖,所以在你的情况下你得到

$1 = -5
$2 = x
$3 = 45

答案 1 :(得分:0)

您可以使用此代码:

$str = '-5+69x45';
$arr = 
 preg_split('#([+x]|-?\d+)#', $str, 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY );
print_r($arr);

<强>输出:

Array
(
    [0] => -5
    [1] => +
    [2] => 69
    [3] => x
    [4] => 45
)