好的,让我们重新开始,现在有更多细节。
我取了my_meta ['lieux']。此时,看起来似乎
string(176) "Paris:10/06/2013->link:20/09/2013->link
Londres:04/06/2014->link:23/09/2014->link
Toulouse:05/12/2015->link:05/12/2015->link"
在第一步之后,我进行拆分以存储每行不同的键/值
$str = $my_meta['lieux'];
$arr = split("\n", $str);
它返回此数组
array(3) {
[0]=>string(82) "Paris:10/06/2013->link:20/09/2013->link"
[1]=>string(46) "Londres:04/06/2014->link:23/09/2014->link"
[2]=>string(46) "Toulouse:05/12/2015->link:05/12/2015->link"
}
现在我希望它存储在不同的键/值国家和每个国家/地区的日期/链接。
目前我做了类似的事情
for ($i = 0; $i < count($arr); $i++) {
preg_match("/^(\w+)\:(\d\d\/\d\d\/\d\d\d\d)->(\w+)\:(\d\d\/\d\d\/\d\d\d\d)->(\w+)/", $arr[$i], $lieux_[$i]);
}
当我打印lieux _ [$ i]时我有
array(6) {
[0]=>string(43) "Paris:10/06/2013->link:20/09/2013->link"
[1]=>string(5) "Paris"
[2]=>string(10) "10/06/2013"
[3]=>string(6) "link"
[4]=>string(10) "20/09/2013"
[5]=>string(6) "link"
}
array(6) {
[0]=>string(45) "Londres:04/06/2014->link:23/09/2014->link"
[1]=>string(7) "Londres"
[2]=>string(10) "04/06/2014"
[3]=>string(6) "link"
[4]=>string(10) "23/09/2014"
[5]=>string(6) "link"
}
array(6) {
[0]=>string(46) "Toulouse:05/12/2015->link:05/12/2015->link"
[1]=>string(8) "Toulouse"
[2]=>string(10) "05/12/2015"
[3]=>string(6) "link"
[4]=>string(10) "05/12/2015"
[5]=>string(6) "link"
}
所以它非常好,我可以在此之后创建一个循环来将我的数据插入好的div等...
但问题是,如果我添加更多日期/链接(:04/06/2014->link
),它就不再起作用,因为正则表达式错误(如果我有两个日期/链接,每个国家/地区)它正在工作,否则,它不再起作用了。)
我想得到类似的东西:
array(10) {
[0]=>string(43) "Paris:10/06/2013->link:20/09/2013->link:20/09/2013->link:20/09/2013->link"
[1]=>string(5) "Paris"
[2]=>string(10) "10/06/2013"
[3]=>string(6) "link"
[4]=>string(10) "20/09/2013"
[5]=>string(6) "link"
[6]=>string(10) "20/09/2013"
[7]=>string(6) "link"
[8]=>string(10) "20/09/2013"
[9]=>string(6) "link"
}
array(4) {
[0]=>string(45) "Londres:04/06/2014->link"
[1]=>string(7) "Londres"
[2]=>string(10) "04/06/2014"
[3]=>string(6) "link"
}
array(2) {
[0]=>string(46) "Toulouse"
[1]=>string(8) "Toulouse"
}
array(10) {
[0]=>string(43) "country4:10/06/2013->link:20/09/2013->link:20/09/2013->link:20/09/2013->link"
[1]=>string(5) "country4"
[2]=>string(10) "10/06/2013"
[3]=>string(6) "link"
[4]=>string(10) "20/09/2013"
[5]=>string(6) "link"
[6]=>string(10) "20/09/2013"
[7]=>string(6) "link"
[8]=>string(10) "20/09/2013"
[9]=>string(6) "link"
}
提前致谢。
答案 0 :(得分:2)
这是因为你的正则表达式明确地只有两个日期和两个链接。
对于1 +日期和链接,请使用以下内容。
/^(\w+)(\:(\d\d\/\d\d\/\d\d\d\d)->(\w+))+/
答案 1 :(得分:-1)
您可以使用此模式:
preg_match_all(
'~(?:^(?<country>\w+)|\G):(?<date>(?:[0-9]{2}/){2}[0-9]{4})->(?<link>\w+)~',
$text, $matches, PREG_SET_ORDER);
foreach($matches as $match) {
echo '<br/>' . $match['date'] . "\t" . $match['link'];
}
编辑:假设您的文本现在是一个行数组($lines
),您可以这样做:
$lines = split("\n", $str);
$results = array();
foreach($lines as $line) {
preg_match_all(
'~(?:^(?<country>\w+)|\G):(?<date>(?:[0-9]{2}/){2}[0-9]{4})->(?<link>\w+)~',
$line, $matches, PREG_SET_ORDER);
foreach($matches as $match) {
if ($match['country']) $country = $match['country'];
$results[$country][] = array(
'date' => $match['date'],
'link' => $match['link']);
}
}
print_r($results);