需要帮助非常简单的正则表达式

时间:2010-06-24 21:38:57

标签: php regex preg-match

我使用PHP来匹配以下数据类型:

[["1200","135"],["127","13"]]

我想将所有数字提取到一个单独的数组中,如下所示:

array(array(1200,135),array(127,13));

我使用preg_match来捕获元素,但到目前为止,我甚至无法将它们与规则相匹配。 如果有人可以帮助我纠正我的规则,甚至提供解决方案来解决这个问题,我将很高兴。

我的正则表达规则是:/ ^[ ([" (\d+) "," (\d+) "])*(,)* ]$ /

我一直保持不转让它在这个论坛上更具可读性。但它不起作用。 请帮忙

4 个答案:

答案 0 :(得分:10)

尝试

var_dump( json_decode('[["1200","135"],["127","13"]]') );

给出:

array(2) {
  [0]=> array(2) {
    [0]=> string(4) "1200"
    [1]=> string(3) "135"
  }
  [1]=> array(2) {
    [0]=> string(3) "127"
    [1]=> string(2) "13"
  }
}

参见PHP手册:

答案 1 :(得分:3)

正则表达式中的一些错误是:使用开始和结束锚点(^和$)而不是转义方括号。

但是确实使用了json_decode(),这就是它的用途。

答案 2 :(得分:1)

非常简单:

  $proper = '[["1200","135"],["127","13"]]';
  $nuked = '[["1200",,"135"],[["127","13"]]';
  $pattern = '/[["[0-9]*","[0-9]*"],["[0-9]*?","[0-9]*"]]/s';
  echo "proper: ". preg_match($pattern, $proper);
  echo "<br>";
  echo "nuked: ". preg_match($pattern, $nuked);

输出:

proper: 1
nuked: 0

除了"之间的数据可以改变之外,它几乎必须与您提供的完全一致。我希望这是你想要的?

答案 3 :(得分:0)

您似乎正在处理JSON,因此请使用json decode,如下所示:

php > print_r(json_decode('[["1200","135"],["127","13"]]'));
Array
(
    [0] => Array
        (
            [0] => 1200
            [1] => 135
        )

    [1] => Array
        (
            [0] => 127
            [1] => 13
        )

)