
本文详解如何用 PHP 的 preg_match() 精确提取 stat 命令输出中的文件名、大小、类型、所有者、所属组、权限、访问/修改/变更/创建时间等关键字段,并提供健壮、可维护的正则表达式及实用代码示例。
本文详解如何用 php 的 `preg_match()` 精确提取 `stat` 命令输出中的文件名、大小、类型、所有者、所属组、权限、访问/修改/变更/创建时间等关键字段,并提供健壮、可维护的正则表达式及实用代码示例。
Linux stat 命令输出格式稳定但存在多行、空格不均、括号嵌套等特点,直接用 explode() 或简单分割极易出错。推荐使用命名捕获组(Named Capture Groups)的 PCRE 正则表达式进行结构化解析,既清晰又便于后续 PHP 数组访问。
以下是一个经过验证、兼容常见 stat 输出(含 GNU coreutils 版本)的正则表达式,支持提取全部 8 个目标字段:
$pattern = '/
File:\s+\'(?P<file>[^\']+)\'\s+
Size:\s+(?P<size>\d+)\s+.*?
IO\s+Block:\s+\d+\s+(?P<type>[\w\s]+?)\s*\n
.*?
Access:\s+\((?P<permissions>[\d\/\-rwx]{10})\)\s+
Uid:\s+\(\s*(?:\d+\/)?\s*(?P<user>\w+)\)\s+
Gid:\s+\(\s*(?:\d+\/)?\s*(?P<group>\w+)\)\s*\n
Access:\s+(?P<access>[\d\-:\.\s]+[+-]\d{4})\s*\n
Modify:\s+(?P<modify>[\d\-:\.\s]+[+-]\d{4})\s*\n
Change:\s+(?P<change>[\d\-:\.\s]+[+-]\d{4})\s*\n
Birth:\s+(?P<birth>[\d\-:\.\s]+[+-]\d{4})
/x';
$output = $matches['File'],
'size' => (int)$matches['Size'],
'type' => trim($matches['Type']),
'permissions'=> $matches['Permissions'],
'user' => $matches['User'],
'group' => $matches['Group'],
'access' => $matches['Access'],
'modify' => $matches['Modify'],
'change' => $matches['Change'],
'birth' => $matches['Birth'],
];
print_r($data);
} else {
echo "Failed to parse stat output.\n";
}</birth></change></modify></access></group></user></permissions></type></size></file>
✅ 关键设计说明:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 使用 /x 修饰符启用空白与注释,大幅提升可读性与可维护性;
- 所有核心字段均采用 (?P
...) 命名捕获,避免序号混淆; - .*? 非贪婪匹配跳过无关行(如 Blocks, Inode, Device),增强鲁棒性;
- 权限字段精确匹配 10 位字符(如 -rw-------),避免误捕括号内数字;
- Uid/Gid 支持 (1002/user) 和 ( user) 等变体,容忍前导空格与可选 UID 数字;
- 时间字段严格匹配带时区偏移(如 -0400)的完整格式,确保跨时区可靠性。
⚠️ 注意事项:
- 某些旧版 stat(如 BusyBox)不支持 Birth 字段,建议先检查 stat --version 并在正则中将 Birth 行设为可选((?:Birth:\s+(?P
...))?\n); - 若需兼容 macOS(BSD stat),其输出格式差异较大,应改用 stat -f + 不同正则,本文方案专用于 GNU/Linux;
- 生产环境建议配合 escapeshellarg() 调用 stat,防止命令注入:shell_exec('stat ' . escapeshellarg($path))。
掌握此模式后,你不仅能解析 stat,更能迁移至其他结构化文本(如 ls -l、df -h)的正则处理——真正把“不会 regex”的短板,转化为系统运维自动化的杠杆。










