Reg Exp-preg_match_all减少数组结果

时间:2018-06-29 14:47:11

标签: php regex preg-match-all

这是我的Reg Exp“ [c]?[\ d + | \ D +] \ s *”。我的输入是“ c7 = c4 / c5 * 100”,结果是:

Array
(
    [0] => Array
        (
            [0] => c7
            [1] => =
            [2] => c5
            [3] => +
            [4] => c3
            [5] => *
            [6] => 1
            [7] => 0
            [8] => 0
        )
)

但是我想要的是:

Array
(
    [0] => Array
        (
            [0] => c7
            [1] => =
            [2] => c5
            [3] => +
            [4] => c3
            [5] => *
            [6] => 100
        )

)

我似乎无法使最后一部分正常工作,我迷失了下一步的工作-有人可以帮忙吗?

谢谢, 保罗

1 个答案:

答案 0 :(得分:1)

您指定了character class [\d+|\D+],它将与任何指定字符匹配。我认为您的意思是将{或{1}}与grouping构造|一起使用,但在这种情况下,它将匹配c后跟c?(?:\d+|\D+)\s*\d+,因此紧接着匹配\D符号,导致=作为匹配项和c=作为匹配项。

尝试匹配可选的c /c后跟一个或多个数字,或者c?匹配不匹配数字|

c?\d+|\D

\D

这将导致:

$re = '/c?\d+|\D/m';
$str = 'c7=c4/c5*100';
preg_match_all($re, $str, $matches);
print_r($matches);

Demo