我在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
我的错误在哪里?
答案 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
)