我需要捕获一些字符串数组..我一直在尝试,但我不能:$
我的代码中有这个:
<?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
希望明确:)
并提前致谢!!
答案 0 :(得分:1)
此文本似乎采用相当规范化的格式,ala 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
)
)
转换正在将/
替换为\/
,将'
替换为"
,以使字符串符合JSON标准。或者那种效果。
答案 1 :(得分: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);
答案 2 :(得分:0)
如果碰巧是不一个有效的json,你可以用字符串进行简单的操作。
$arr = explode("],[", trim($str, " []"));
输出将是一个包含与此类似的元素的数组:"'2013/04/03',8.300" , "'2013/04/04',8.320"
这比使用RegExp方法更快次。