我正在从记录多行类型的日志文件中读取日志。在阅读QRadar时将两个记录组合在一起,并将其作为一个日志。
在将日志源添加到QRadar时,我描述了日志行的开始和结束模式:
正则表达式正则表达式: const express = require('express');
const router = express.Router();
const Task = require('../models/task');
router.get('/',async(req,res)=>{
const tasks = await Task.find();
console.log(tasks);
res.json(tasks);
} );
router.get('http://localhost:3000/api/task/:id',async(req,res)=>{
const tasks = await Task.findById(req.params.id);
console.log(tasks);
res.json(tasks);
} );
router.post('http://localhost:3000/api/task', async(req,res)=>{
const { title,img, price, info } = req.body;
const task = new Task({
title:title,
img:img,
price:price,
info:info
});
await task.save();
res.json({status :'Task saved'});
});
router.put('http://localhost:3000/api/task/:id',async (req,res)=>{
const { title,img, price,info } = req.body;
const newTask = {
title:title,
img:img,
price:price,
info:info
};
await Task.findByIdAndUpdate(req.params.id,newTask);
res.json({status : 'Task Updated'});
});
router.delete('http://localhost:3000/api/task/:id', async(req,res)=>{
await Task.findByIdAndRemove(req.params.id);
res.json({status:'Task Deleted'});
});
module.exports = router;
正则表达式正则表达式:^(\d{7})\,
我应该已经阅读过类似的日志:
(\d{2}:\d{2}:\d{2})$
但是我收到了一些组装好的东西,例如:
1158896,someuser,Inner User,Minor,10.6.130.11,2019-09-29 03:01:15,Security Management,Log in to the server,Network Management,Succeeded,User name: someuser,2019-09-29 03:01:15
1158897,someuser,Inner User,Minor,10.6.130.11,2019-09-29 03:03:16,Security Management,Log out the server,Network Management,Succeeded,"User name: someuserOnline duration: 0 day(s) 0 hour(s) 2 minute(s) 1 second(s)",2019-09-29 03:03:16
这是我的RegEx起始和结束模式的regex101.com记录。
https://regex101.com/r/2IfMR7/3
https://regex101.com/r/2IfMR7/4
如您所见,它在regex101.com中正常工作 为什么QRadar将它们作为一个整体阅读?
答案 0 :(得分:0)
您(或qradar)可能正在使用带有多行捕获字符的贪婪量词。
如果您正在执行以下操作:^(\d{7})\,(?:\n|.)*(\d{2}:\d{2}:\d{2})$
,其中中心组是(?:\n|.)*
或跨多行匹配的任何类似短语,则贪婪的运算符*
表示它将尝试尝试使用*?
;从整个日志页面上的前7位数字匹配到整个日志页面上的最后一个时间戳。 ?
使其变得非贪婪,因此它将在第一个时间戳记处停止。
比较:greedy与non-greedy。