Regex 用于dns日志的正则表达式
我的DNS日志如下所示:Regex 用于dns日志的正则表达式,regex,logging,dns,Regex,Logging,Dns,我的DNS日志如下所示: 17/04/2017 08:59:38 09DC PACKET 000000A939E64600 UDP Rcv 10.254.30.96 c650 Q [0001 D NOERROR] A (8)master11(10)teamviewer(3)com(0) 17/04/2017 08:59:38 09DC PACKET 000000A9404FABE0 UDP Rcv 10.254.30.87 9bae Q [0001
17/04/2017 08:59:38 09DC PACKET 000000A939E64600 UDP Rcv 10.254.30.96 c650 Q [0001 D NOERROR] A (8)master11(10)teamviewer(3)com(0)
17/04/2017 08:59:38 09DC PACKET 000000A9404FABE0 UDP Rcv 10.254.30.87 9bae Q [0001 D NOERROR] A (7)master2(10)teamviewer(3)com(0)
17/04/2017 08:59:42 09E0 PACKET 000000A9404D15B0 UDP Rcv 10.254.35.43 fdcc Q [0001 D NOERROR] A (6)mobile(4)pipe(4)aria(9)microsoft(3)com(0)
17/04/2017 09:49:45 09E8 PACKET 000000A94194FE80 UDP Rcv 8.8.8.8 646d R Q [8381 DR NXDOMAIN] A (3)mta(3)dkf(2)com(0)
master2.teamviewer.com
在每行的末尾,您将看到如下所示的域名:
(7)master2(10)teamviewer(3)com(0)
我只想得到以下部分:
master teamviewer com
并将空格替换为“.”,得到如下结果:
17/04/2017 08:59:38 09DC PACKET 000000A939E64600 UDP Rcv 10.254.30.96 c650 Q [0001 D NOERROR] A (8)master11(10)teamviewer(3)com(0)
17/04/2017 08:59:38 09DC PACKET 000000A9404FABE0 UDP Rcv 10.254.30.87 9bae Q [0001 D NOERROR] A (7)master2(10)teamviewer(3)com(0)
17/04/2017 08:59:42 09E0 PACKET 000000A9404D15B0 UDP Rcv 10.254.35.43 fdcc Q [0001 D NOERROR] A (6)mobile(4)pipe(4)aria(9)microsoft(3)com(0)
17/04/2017 09:49:45 09E8 PACKET 000000A94194FE80 UDP Rcv 8.8.8.8 646d R Q [8381 DR NXDOMAIN] A (3)mta(3)dkf(2)com(0)
master2.teamviewer.com
为此,我使用了以下正则表达式:
(?<=\)).*?(?=\()
有人对这个问题有什么建议或解决办法吗?
谢谢你可以试试这个:
\(\d+\)(?:[\w]+\(\d+\))+
const regex=/\(\d++\)(?:[\w]+\(\d++\)++/g;
const str=`17/04/2017 08:59:38 09DC数据包000000 A939E64600 UDP Rcv 10.254.30.96 c650 Q[0001 D NOERROR]A(8)master11(10)teamviewer(3)com(0)
2017年4月17日08:59:38 09DC数据包000000 A9404FABE0 UDP Rcv 10.254.30.87 9bae Q[0001 D NOERROR]A(7)master2(10)teamviewer(3)com(0)
2017年4月17日08:59:42 09E0数据包000000 A9404D15B0 UDP Rcv 10.254.35.43 fdcc Q[0001 D NOERROR]A(6)移动(4)管道(4)aria(9)microsoft(3)com(0)
2017年4月17日09:49:45 09E8数据包000000 A94194FE80 UDP Rcv 8.8.8 646d R Q[8381 DR NXDOMAIN]A(3)mta(3)dkf(2)com(0)
`;
让m;
while((m=regex.exec(str))!==null){
console.log(m[0]。拆分(/\(\d+\)/).filter(val=>val.join(“.”);
}
您可以从以下位置使用解决方案:
见
这里,
-文字A
A
-1+空格\s+
-1+个数字,用\(\d+\)
和(
)
-任何0+字符,尽可能少(因为(.*)
是惰性量词)*?
-上述两个子模式的交替序列\(\d+\)(.*?\(\d+\)(.*?\(\d+\)
Format String : $1.$2.$3
不知道你在做什么。尝试替换为
s.replace(/\([^\s()]+\)(?=\s*$)/g'。)
。在那里捕获是否以特定的方式工作?尝试\)([^()]+)\(
(在QRADAR中,而不是在regex building网站上)请检查。这是您正在使用的同一个软件吗?好吧,如果以前的regex只捕获了所有的数字,也许您需要一个与您需要的文本以外的所有文本匹配的regex?尝试^.*\([^\s()]+\)(?=\s*$)
我将发布文章让您接受,Nop不是使用JavaScript,而是QRADAR中的JS正则表达式风格。