3

我需要捕获一些字符串数组..我一直在尝试,但我不能:$

我的代码中有这个:

<?php
$feed = "[['2013/04/03',8.300],['2013/04/04',8.320],['2013/04/05',8.400]]";
preg_match_all("/\[(.*?)\]/",$feed,$matches);
print_r($matches);

并且正在返回:

Array
(
    [0] => Array
        (
            [0] => [['2013/04/03',8.300]
            [1] => ['2013/04/04',8.320]
            [2] => ['2013/04/05',8.400]
        )

    [1] => Array
        (
            [0] => ['2013/04/03',8.300
            [1] => '2013/04/04',8.320
            [2] => '2013/04/05',8.400
        )

)

我如何使用 preg_match_all 或 preg_split.. 或返回一个元素数组(如 $matches[1][1] 或 $matches[1][2])所需的任何方法?

我的意思是每个元素的格式应该是:

'2013/04/05',8.400

希望清楚:)

并提前感谢!

4

3 回答 3

1

此文本似乎采用相当规范的格式,例如 JSON。完全有可能避免 reg 匹配并使用json_decode 对其进行解析,尽管必须进行一些小的转换。

// original input
$text = "[['2013/04/03',8.300],['2013/04/04',8.320],['2013/04/05',8.400]]";

// standard transformation to correct ' and / characters
$text = str_replace( array('/', "'"), array('\/', '"'), $text );

// let native PHP take care of understanding the data
$data = json_decode( $text );

这为您提供了包含日期和值的数组数组。print_r( $data );给出:

Array (
    [0] => Array (
        [0] => 2013/04/03
        [1] => 8.3
    )
    [1] => Array (
        [0] => 2013/04/04
        [1] => 8.32
    )
    [2] => Array (
        [0] => 2013/04/05
        [1] => 8.4
    )
)

转换正在替换/to\/'to"以使字符串符合 JSON 标准。或者类似的东西。

于 2013-05-01T12:59:16.457 回答
0

你可以试试这个:

<?php
$feed = "[['2013/04/03',8.300],['2013/04/04',8.320],['2013/04/05',8.400]]";
preg_match_all('~\[\K[^[\]]++~', $feed, $matches);
print_r($matches);
于 2013-05-01T12:41:50.400 回答
0

如果它碰巧不是一个有效的 json,你可以用字符串做简单的操作。

$arr = explode("],[", trim($str, " []"));

输出将是一个包含与此类似的元素的数组:"'2013/04/03',8.300" , "'2013/04/04',8.320"

这将比使用 RegExp 方法的方法快几倍。

于 2017-07-14T12:50:28.790 回答