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

PHP正则解析括号内数据:将文件名与大小转为关联数组

在PHP中解析指定Files格式文本为关联数组

处理流程

1. 转义HTML实体

先把文本里的"转换为普通双引号,避免后续解析干扰:

$input = 'Files("textfile1.txt", 7268474425, "textfile2.txt", 661204928, "textfile3.txt", 121034)';
$decodedStr = html_entity_decode($input);

2. 提取括号内的核心内容

用正则把Files(...)结构里的参数部分单独提取出来:

preg_match('/Files\((.*?)\)/', $decodedStr, $matches);
$content = $matches[1] ?? '';

3. 构建关联数组

以下两种方法任选其一:

方法一:正则全局匹配键值对

通过正则一次性匹配所有文件名和对应大小组,再遍历生成数组:

$pattern = '/"([^"]+)",\s*(\d+)/';
preg_match_all($pattern, $content, $matchPairs, PREG_SET_ORDER);

$fileMap = [];
foreach ($matchPairs as $pair) {
    $fileMap[$pair[1]] = (int)$pair[2];
}

方法二:分割后两两配对

先把内容分割为单个元素,再按顺序两两组合成键值对:

$items = array_map('trim', explode(',', $content));
$fileMap = [];
for ($i = 0; $i < count($items); $i += 2) {
    $filename = trim($items[$i], '"');
    $size = (int)$items[$i+1];
    $fileMap[$filename] = $size;
}

最终结果

两种方法都会生成如下可迭代的关联数组:

Array
(
    [textfile1.txt] => 7268474425
    [textfile2.txt] => 661204928
    [textfile3.txt] => 121034
)

补充说明

  • 正则/"([^"]+)",\s*(\d+)/中,[^"]+确保只捕获双引号内的文件名,\s*兼容参数间的任意空白字符,\d+匹配数字格式的文件大小。
  • 分割法更依赖格式的规范性,适合确定输入无异常的场景;正则法则容错性更强,能适配参数间不同的空白格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:35:34