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

如何使用PHP正则提取并计算file.txt指定列的数值?

PHP正则提取文件指定列数值并计算输出

嘿,我来帮你搞定这个需求!下面我会一步步带你实现从已读取的file.txt内容中用正则提取指定列数值,完成计算后输出结果的流程,还会针对常见的文件格式给出示例代码。

假设你的file.txt格式示例

先举个常见的空白分隔列的例子(如果是CSV或其他格式,后面会说调整方法):

15 25 35
45 55 65
75 85 95

第一步:读取文件内容

你已经完成这一步了,但还是贴个标准写法方便参考:

// 一次性读取整个文件内容
$fileContent = file_get_contents('file.txt');

// 如果你是按行读取的,也可以用这个(得到每行的数组)
// $lines = file('file.txt', FILE_IGNORE_NEW_LINES);

第二步:用正则提取指定列数值

这里以提取第二列为例,根据文件分隔符调整正则:

情况1:空白字符(空格/制表符)分隔列

用多行模式正则匹配每行的第二列:

// 正则匹配每行第二列的数值(支持整数)
preg_match_all('/^\s*\S+\s+(\d+)\s*.*/m', $fileContent, $matches);

// $matches[1]就是提取到的第二列所有数值的字符串数组
$columnValues = $matches[1];

正则解释:

  • m 修饰符:开启多行模式,让^和$匹配每行的开头和结尾
  • ^\s*:跳过每行开头的空白字符
  • \S+:匹配第一列的内容(非空白字符)
  • \s+:匹配列之间的空白分隔符
  • (\d+):捕获第二列的整数数值(这是我们要的内容)
  • \s*.*:匹配第二列之后的剩余内容

情况2:逗号分隔的CSV格式

如果是CSV文件,正则改成这样:

preg_match_all('/^[^,]*,([^,]*),?.*$/m', $fileContent, $matches);
$columnValues = $matches[1];

情况3:支持小数数值

如果列里有小数,把正则中的\d+改成\d+\.?\d*即可:

preg_match_all('/^\s*\S+\s+(\d+\.?\d*)\s*.*/m', $fileContent, $matches);

第三步:数值转换与计算

提取到的是字符串数组,先转成数值类型,再做求和、平均值等计算:

// 转换为整数数组(如果是小数就用floatval)
$numericValues = array_map('intval', $columnValues);

// 计算总和
$totalSum = array_sum($numericValues);

// 计算平均值(避免除以0)
$average = count($numericValues) > 0 ? $totalSum / count($numericValues) : 0;

// 输出结果
echo "指定列数值总和:{$totalSum}\n";
echo "指定列数值平均值:{$average}\n";

自定义调整提示

  • 如果要提取其他列(比如第三列),只需要调整正则中捕获组的位置:比如第三列的正则可以写成/^\s*\S+\s+\S+\s+(\d+)\s*.*/m
  • 如果文件有特殊分隔符(比如竖线|),把正则中的\s+换成\|即可(注意转义)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:59:36