preg_match_all给出未知结果

时间:2015-06-09 12:09:52

标签: php regex

我有一个看起来如此的字符串:

"first: [[1394,97],[13944,97]],
second: [[1394,11400],[13944,7898]]"

我正在尝试使用php preg_match_all来简单地给我(删除'first','second')

[1394,97],[13944,97],[1394,11400],[13944,7898]

然后我可以使用它创建数组。

当我使用正则表达式时:

$reg = "/(\[?(?:\[(\d{1,}),(\d{1,})\]))/";
preg_match_all($reg, $input_string, $matches);

我不明白输出:

array (size=4)
  0 => 
    array (size=4)
      0 => string '[[1394,97]' (length=10)
      1 => string '[13944,97]' (length=10)
      2 => string '[[1394,11400]' (length=13)
      3 => string '[13944,7898]' (length=12)
  1 => 
    array (size=4)
      0 => string '[[1394,97]' (length=10)
      1 => string '[13944,97]' (length=10)
      2 => string '[[1394,11400]' (length=13)
      3 => string '[13944,7898]' (length=12)
  2 => 
    array (size=4)
      0 => string '1394' (length=4)
      1 => string '13944' (length=5)
      2 => string '1394' (length=4)
      3 => string '13944' (length=5)
  3 => 
    array (size=4)
      0 => string '97' (length=2)
      1 => string '97' (length=2)
      2 => string '11400' (length=5)
      3 => string '7898' (length=4)

如何修改以返回第一个数组,这就是我想要的?

1 个答案:

答案 0 :(得分:2)

摆脱所有捕获括号(),如

$reg = "/\[\d{1,},\d{1,}\]/";
preg_match_all($reg, $input_string, $matches); 

会给你一个输出

Array ( [0] => Array ( [0] => [1394,97] 
                       [1] => [13944,97] 
                       [2] => [1394,11400] 
                       [3] => [13944,7898] ) )