打开 regex101,它会告诉你”匹配到了 1,284 条”。但运维排障时你真正想知道的不是”几条”,而是——这些接口平均耗时多少?P99 是多少?哪个接口最慢?哪个错误码最多? 这些问题,传统做法要么导进数据库写 SQL、要么写个 awk/Python 脚本。Regex Pro 的「统计」面板把这一步搬进了浏览器:把捕获组当数据列,贴日志直接出表。
核心概念:捕获组就是数据列
「匹配列表」给你每条命中的明细;「统计」面板把这些命中当成一张表来汇总。关键是”聚合目标”下拉——你选”整段匹配($&)“或某个捕获组,工具就把每条命中里那一部分的值抽成一列,然后并行算两件事:
| 类型 | 算什么 | 适合的列 |
|---|---|---|
| 数值聚合 | 数量 / 求和 / 平均 / 中位数 / P95 / P99 / 极值 | 耗时、金额、字节数等能解析成数字的 |
| 频次统计 | 出现了哪些不同值、各几次 | 状态码、接口名、错误类型等离散值 |
一句话:匹配列表是明细,统计面板把明细汇成数。
实战:从原始日志到”每接口耗时表”
假设日志长这样:
2026-05-30 10:01:22 GET /api/user/profile status=200 cost=132ms
2026-05-30 10:01:23 GET /api/order/list status=200 cost=455ms
2026-05-30 10:01:24 GET /api/user/profile status=500 cost=12ms
2026-05-30 10:01:25 GET /api/order/list status=200 cost=1320ms
第一步:一条带命名组的正则
Pattern: (?<api>/api/[\w/]+)\s+status=(?<code>\d{3})\s+cost=(?<ms>\d+)ms
三个命名组各管一件事:api 分类维度、code 状态码、ms 耗时。贴进测试文本后,先在「匹配列表」确认三组都对位。
抓数字的关键:让捕获组里只放纯数字。写
cost=(?<ms>\d+)ms而不是(?<ms>\d+ms)——把ms留在组外,组里是干净的132,数值聚合才认得。金额同理\$(?<amt>\d+\.\d{2})让$在组外。
第二步:整体数值视图
切「统计」面板,聚合目标选 ms 组:
数量 4 求和 1919 平均 479.75
中位数 293.5 P95 1320 P99 1320 最大 1320 最小 12
一眼看到整体耗时分布。
第三步:分组聚合 = GROUP BY
面板下半部”按 api 分组、对每组的 ms 求和 / 均值 / 极值”:
| api | 次数 | 和 | 均值 | 最大 |
|---|---|---|---|---|
| /api/user/profile | 2 | 144 | 72 | 132 |
| /api/order/list | 2 | 1775 | 887.5 | 1320 |
/api/order/list 均值是另一个接口的 12 倍——最慢接口一眼锁定,全程不碰数据库、不写脚本。
第四步:换个维度看频次
把聚合目标换成 code,频次统计告诉你 200 出现 3 次、500 出现 1 次——状态码分布立现。文本型维度(状态码、错误类型、地区)都走频次这栏。
命中很多 / 日志很大怎么办
- 统计算的是全量命中,不是列表里显示的前几十条——匹配在 Worker 里完整跑完(单次最多收集到 5 万条量级),几千上万行日志的均值和分位都准。
- 文件超过约 2MB:用测试文本区的「📁 打开文件」走流式扫描,分块扫不卡页面。
- 海量数据:先用正则把目标行 grep 出来、再贴进来做精细聚合,或分批处理,避免撞收集上限。
把结果拿出去
| 按钮 | 给你什么 | 用途 |
|---|---|---|
| 复制统计 | 数值摘要文本 | 贴进工单 / 报告 |
| 复制数值列 | 该列全部原始值,每行一个 | 粘进 Excel 当一列,自己做透视 / 画图 |
| 复制分组 | 分组聚合表,TSV | 粘进 Excel / 飞书表格自动分列 |
典型闭环:用「复制分组」导出每接口耗时表 → 表格里按均值排序找最慢的 → 把那条接口名拿回工具、收紧正则只匹配它 → 用数值聚合单独看它的 P99 分布。
正则不只是”找东西”的工具。当你把捕获组看成数据列,一条 pattern 就能把一堆非结构化日志变成可读的数据表——这是 Regex Pro 区别于普通正则测试器的地方。