1

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

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

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

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

我正在使用 preg_match 来捕获元素,但到目前为止,我什至无法将它们与规则进行匹配。如果有人可以帮助我更正我的规则,甚至提供有关如何完成此操作的解决方案,我将很高兴。

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

我保持它未转义以使其在此论坛上更具可读性。但是它不起作用。请帮忙

4

4 回答 4

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 手册:

于 2010-06-24T21:42:10.137 回答
3

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

但是一定要使用 json_decode(),这就是它的用途。

于 2010-06-24T21:41:51.200 回答
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

"除了可以更改的数据之外,它几乎必须与您给出的完全一样。我希望这是你想要的?

于 2010-06-24T22:20:25.927 回答
0

看来您正在处理 JSON,因此请使用 json 解码,如下所示:

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

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

)
于 2010-06-24T21:43:31.557 回答