3

preg_split我在php中的函数有问题

我的正则表达式是

#^(-?[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

我的错误在哪里?

4

2 回答 2

1

您可以使用以下代码:

$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
)
于 2012-02-13T15:35:35.993 回答
1

我想你误会了preg_split

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

通过使用PREG_SPLIT_DELIM_CAPTURE捕获组的标志内容被添加到结果数组(preg_spit doc)。

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

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

$1 = -5
$2 = x
$3 = 45
于 2012-02-13T15:20:43.053 回答