从字符串中检索数字字符

时间:2012-08-01 14:57:00

标签: php regex

我有一个像这样的字符串 -

[ [ -2, 0.5 ],

我想检索数字字符并将它们放入一个最终看起来像这样的数组:

array(
  [0] => -2,
  [1] => 0.5
)

这样做的最佳方式是什么?

修改

更全面的例子

[ [ -2, 0.5, 4, 8.6 ],
  [ 5,  0.5, 1, -6.2 ],
  [ -2, 3.5, 4, 8.6 ],
  [ -2, 0.5, -3, 8.6 ] ]

我逐行浏览这个矩阵,我希望将数字提取到每行的数组中。

1 个答案:

答案 0 :(得分:5)

最简单的方法是使用正则表达式和preg_match_all()

preg_match_all( '/(-?\d+(?:\.\d+)?)/', $string, $matches);

生成的$matches[1]将包含您要搜索的确切数组:

array(2) {
  [0]=>
  string(2) "-2"
  [1]=>
  string(3) "0.5"
}

正则表达式为:

(         - Match the following in capturing group 1
 -?       - An optional dash
 \d+      - One or more digits
 (?:      - Group the following (non-capturing group)
   \.\d+  - A decimal point and one or more digits
 )
 ?        - Make the decimal part optional
)

您可以在the demo中看到它。

编辑:由于OP更新了问题,因此可以使用json_decode()轻松解析矩阵的表示形式:

$str = '[ [ -2, 0.5, 4, 8.6 ],
  [ 5,  0.5, 1, -6.2 ],
  [ -2, 3.5, 4, 8.6 ],
  [ -2, 0.5, -3, 8.6 ] ]';
var_dump( json_decode( $str, true));

这里的好处是不需要任何不确定性或正则表达式,它将正确地键入所有单个元素(作为整数或浮点数取决于其值)。那么,will output上面的代码:

Array
(
    [0] => Array
        (
            [0] => -2
            [1] => 0.5
            [2] => 4
            [3] => 8.6
        )

    [1] => Array
        (
            [0] => 5
            [1] => 0.5
            [2] => 1
            [3] => -6.2
        )

    [2] => Array
        (
            [0] => -2
            [1] => 3.5
            [2] => 4
            [3] => 8.6
        )

    [3] => Array
        (
            [0] => -2
            [1] => 0.5
            [2] => -3
            [3] => 8.6
        )

)