用正则表达式解析字符串

时间:2010-06-03 11:42:42

标签: php regex

我试图解析这个字符串:

$right = '34601)S(1,6)[2] - 34601)(11)[2] + 34601)(3)[2,4]';

以下正则表达式:

const word = '(\d{3}\d{2}\)S{0,1}\([^\)]*\)S{0,1}\[[^\]]*\])';
preg_match('/'.word.'{1}(?:\s{1}([+-]{1})\s{1}'.word.'){0,}/', $right, $matches);
print_r($matches);

我想像这样返回数组:

Array
(
    [0] => 34601)S(1,6)[2] - 34601)(11)[2] + 34601)(3)[2,4]
    [1] => 34601)S(1,6)[2]
    [2] => -
    [3] => 34601)(11)[2]
    [4] => +
    [5] => 34601)(3)[2,4]
)

但我只返回以下内容:

Array
(
    [0] => 34601)S(1,6)[2] - 34601)(11)[2] + 34601)(3)[2,4]
    [1] => 34601)S(1,6)[2]
    [2] => +
    [3] => 34601)(3)[2,4]
)

我认为,这是因为[^]] *或[^]] *在单词中, 但我应该如何纠正正则表达式以另一种方式匹配呢?

我试图指定它:

\d+(?:[,#]\d+){0,}

所以单词成为

const word = '(\d{3}\d{2}\)S{0,1}\(\d+(?:[,#]\d+){0,}\)S{0,1}\[\d+(?:[,#]\d+){0,}\])';

但它什么都没有

1 个答案:

答案 0 :(得分:0)

好吧,我使用它,它的工作原理

preg_match_all('/(?:\s{1}([+-]{1})\s{1}){0,}'.word.'/', $right, $matches);