You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现:按指定模式区间提取文件行并存入数组

嘿,我懂你想要用PHP从Zone文件里精准提取某个配置区块的内容并存入数组的需求,刚好我之前也处理过类似的DNS配置文件解析,给你分享个可行的方案:

首先先明确你的Zone文件结构:每个配置区块都是以; ; [区块名] config ;开头,跟着分割线,然后是具体的记录行,直到下一个区块的注释行结束。那我们的核心思路就是定位起始标记→开启收集→遇到结束标记停止收集。

具体实现步骤

  1. 读取Zone文件内容,按行拆分;
  2. 定义你要提取的区块的起始匹配规则,以及结束匹配规则;
  3. 遍历每一行,根据标记判断是否要收集当前行;
  4. 最后得到目标行的数组。

完整代码示例

假设我们要提取mail config这个区块的内容,代码如下:

// 1. 读取Zone文件,这里换成你的文件路径
$zoneFilePath = 'your-domain.zone';
// 用file()逐行读取,大文件更友好
$lines = file($zoneFilePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// 2. 定义匹配规则:起始和结束的区块注释行
// 要提取哪个区块,就改这里的关键词
$targetBlockName = 'mail';
$startPattern = "/^; ; {$targetBlockName} config ;$/";
// 结束规则是下一个任意配置区块的注释行
$endPattern = '/^; ; .* config ;$/';

$targetLines = [];
$isCollecting = false;

// 3. 遍历每一行,收集目标内容
foreach ($lines as $line) {
    $trimmedLine = trim($line);
    
    // 找到起始标记,开启收集模式
    if (preg_match($startPattern, $trimmedLine)) {
        $isCollecting = true;
        // 如果你需要把区块的起始注释行也加入数组,就解开下面这行
        // $targetLines[] = $line;
        continue;
    }
    
    // 已经在收集模式下,遇到下一个区块标记,停止收集
    if ($isCollecting && preg_match($endPattern, $trimmedLine)) {
        $isCollecting = false;
        continue;
    }
    
    // 处于收集模式,且跳过分割线(不需要的话可以删掉这个判断)
    if ($isCollecting && strpos($trimmedLine, '-----------------------------------------------------------------') === false) {
        // 可选:过滤掉纯注释行(如果需要保留注释就去掉这个判断)
        if (strpos($trimmedLine, ';') !== 0) {
            $targetLines[] = trim($line);
        }
    }
}

// 输出结果看看
print_r($targetLines);

代码说明与调整

  • 提取不同区块:只需要修改$targetBlockName的值,比如改成base就能提取基础配置区块;
  • 保留/过滤内容:如果需要保留分割线、注释行或者空行,直接调整对应的判断条件即可;
  • 大文件优化:用file()函数读取文件比file_get_contents更适合大文件,因为它会逐行读取,不会占用过多内存;
  • 正则适配:如果你的Zone文件注释行有多余空格,可以把正则改成/^; ;\s*{$targetBlockName}\s*config\s*;$/,用\s*匹配任意空白字符,适配更灵活的格式。

比如提取mail config区块后,$targetLines会得到:

Array
(
    [0] => mail 14400 IN A 1.2.3.4
    [1] => mail 14400 IN AAAA 1:2:3::4
    [2] => @ 14400 IN MX 10 mail.example.com.
)

内容的提问来源于stack exchange,提问作者Darwick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:02:06