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
相关产品推荐
相关产品推荐

