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

如何用Logstash与正则表达式提取日志请求响应数据?正则匹配求助

正则匹配日志问题求助

我有一份包含应用请求与响应的日志文件,尝试了多种正则表达式模式但均未匹配到内容,恳请给出修改建议。

原正则模式

(?m)\b\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}\b.?\bRequest given by the user\b.?\brspDesc is\b(?!.\n)..?(?=\R|$)

日志示例

2023-05-11 00:20:26,103 [http-apr-7777-exec-46] INFO com.welcome.ws.AccountWebServiceImpl. - Request given by the user

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:GetCustomerBalanceReq xmlns="url" xmlns:ns2="url">

testt
**
xls

ns2:ID/EID/5000000004/123456****1234</ns2:ID>
</ns2:GetCustomerBalanceReq>

2023-05-11 00:20:26,144 [http-apr-7777-exec-46] INFO com.welcome.svc.AccountService. - rspCode is:1001 and rspDesc is:Account or Media does not Exist

问题分析

原正则存在几个关键问题:

  • .?仅能匹配单个任意字符,无法跨越请求行与rspDesc行之间的大量换行和内容
  • (?!.\n)负前瞻逻辑无效,且..?最多匹配2个字符,完全无法覆盖中间的日志内容
  • 多行模式(?m)仅改变^和$的匹配范围,不影响.对换行的处理,导致无法跨行匹配

修改建议

1. 匹配完整请求-响应块并提取rspDesc内容

使用单行模式(?s)让.匹配换行符,结合非贪婪匹配跨越中间内容:

(?s)\b\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}\b.*?Request given by the user.*?rspDesc is:(.*?)(?=\R|$)
  • (?s):开启单行模式,.可匹配换行
  • .*?:非贪婪匹配任意字符,避免过度匹配
  • 捕获组(.*?)提取rspDesc后的具体描述

2. 仅提取rspDesc的描述文本

如果只需要rspDesc的内容,可简化为:

rspDesc is:(.*?)(?=\s|$)

内容的提问来源于stack exchange,提问作者Hamzeh Abu Ajamieh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:42:38