我有一个看起来像这样的字符串:
[2005]
one
two
three
[2004]
six
最顺畅的是从它获得一个看起来像这样的数组:
array(
['2005'] => "one \n two \n three",
['2005'] => "six",
)
...或者甚至可能将内部数组切成行数组......
我尝试使用preg_split,虽然有效,但没有给出关联数组键,所以我没有年份数字作为键。
在没有遍历所有行的情况下,有没有很酷的方法呢?
答案 0 :(得分:2)
/(\[[0-9]{4}\])([^\[]*)/
会告诉你日期和下一个日期之后的事情。
使用组创建数组:使用preg_match_all()
,您将获得$ matches数组,其中$ matches [1]是日期,$ matches [2]是其后的数据。
答案 1 :(得分:1)
使用Sylverdrag的正则表达式作为指南:
<?php
$test = "[2005]
one
two
three
[2004]
six";
$r = "/(\[[0-9]{4}\])([^\[]*)/";
preg_match_all($r, $test, $m);
$output = array();
foreach ($m[1] as $key => $name)
{
$name = str_replace(array('[',']'), array('',''), $name);
$output[ $name ] = $m[2][$key];
}
print_r($output);
?>
输出(PHP 5.2.12):
Array
(
[2005] =>
one
two
three
[2004] =>
six
)
答案 2 :(得分:0)
这稍微复杂一些:
preg_match_all('/\[(\d+)\]\n((?:(?!\[).+\n?)+)/', $ini, $matches, PREG_SET_ORDER);
(可以通过了解真实的格式约束来简化。)