我需要能够在PHP中解析这类数据:
Acct: 1
email : bleh@gmail.com
status : online
--------------------------------------------------
Acct: 2
email : dfgg@fgfg.com
status : banned
--------------------------------------------------
Acct: 3
signedupname : SomeUsername
somethingelse : offline
--------------------------------------------------
正如您所看到的,数据在很大程度上是随机的。唯一保持不变的是-----
分隔每个条目和Acct: 1
位。每个:
之间的填充通常会随着变量的变化而变化,以表示每个数据位。
我已经尝试过使用正则表达式自己解决所有问题,但我确实不够熟练,能够正确地完成它。在这结束时,我想要根据以下数据:
Acct: <integer>
var1: <string>
var2: <string>
如果这有任何意义的话。它不需要那么有效,因为我需要每天做一次这样的事情,我不介意等待它需要多长时间。
谢谢。 :)
编辑:这就是我自己做的事情:
<?php
$data = file_get_contents('records.txt');
$data = explode('******** Saved Host list with acct/variables ********', $data);
$data = explode('--------------------------------------------------', $data[1]);
foreach($data as &$dataz)
{
$dataz = trim($dataz);
}
$data = str_replace('Acct:', "\nAcct:", $data);
foreach($data as $dataz)
{
preg_match('/Acct: (.*)/', $dataz, $match);
$acct = $match[1];
preg_match('/: (.*)/', $dataz, $match);
$var1 = $match[1];
echo $var1;
}
?>
我已经提取Acct:
部分,但除此之外的任何事情我根本无法理解。
答案 0 :(得分:1)
这段代码将获取您的整个输入,并为输入中的每条记录生成一个关联数组:
// replace ----- with actual number of dashes
foreach (explode('-----', $input) as $entry) {
$entry = trim($entry);
$record = array();
foreach (explode("\n", $entry) as $line) {
$parts = explode(':', $line);
$varname = trim($parts[0]);
$value = trim($parts[1]);
$record[$varname] = $value;
}
// Do anything you want with $record here
}
编辑:我刚刚查看了您发布的代码。你真的不需要正则表达式来做你想做的事情。在正确的地方使用正则表达式时非常方便,但大多数情况下,使用它是不正确的。