【发布时间】:2018-04-12 11:06:13
【问题描述】:
我有一个文本文件(实际上是一个区域文件),如下所示:
...
;
; base config
; -----------------------------------------------------------------
@ 14400 IN A 1.2.3.4
@ 14400 IN AAAA 1:2:3::4
;
; mail config
; -----------------------------------------------------------------
mail 14400 IN A 1.2.3.4
mail 14400 IN AAAA 1:2:3::4
@ 14400 IN MX 10 mail.example.com.
;
; www config
; -----------------------------------------------------------------
www 14400 IN CNAME example.com.
...
我想将每个未注释掉的行逐块解析为一个数组。所以它应该是这样的:
$array = array(
"base" => array(
"0" => "@ 14400 IN A 1.2.3.4",
"1" => "@ 14400 IN AAAA 1:2:3::4"
),
"mail" => array (
"0" => "mail 14400 IN A 1.2.3.4",
"1" => "mail 14400 IN AAAA 1:2:3::4",
"1" => "@ 14400 IN MX 10 mail.example.com."
),
"www" => array(
"0" => "www 14400 IN CNAME example.com."
)
);
在这种情况下,cmets 是“;”所以它根本不需要解析。注释掉的部分是修复的,比如“基本配置”和“邮件配置”,“www 配置”没有改变,每次看起来都和我的例子一样。但是每个块中的记录(没有用 ; 注释掉)可能会发生变化,因此可能只有 1 条记录,或 5、10 或任何记录。我尝试将文本文件放入一个数组中,并使用 foreach 循环对其进行处理,然后使用 preg_match() 搜索相应的行但它没有解决,因为我不知道有多少记录(行)直到文件的下一部分。她是我的尝试:
<?php
// Get lines
$lines = file('file.txt');
// Loop through our array
foreach ($lines as $line_num => $line) {
if (preg_match("/\bbase config\b/i", $line)) {
$line++
// I don't know how to continue and find the next section
}
}
?>
如果你能帮我处理一个块(base、mail 或 www),它会对我有很大帮助,基于此,我可以解决其他块。
【问题讨论】:
-
贴出你试过的代码
-
编辑了我的问题并尝试了。我认为这不会有太大帮助。
标签: php