首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dns日志的正则表达式

dns日志的正则表达式
EN

Stack Overflow用户
提问于 2017-05-04 08:29:42
回答 2查看 1.1K关注 0票数 1

我有一个DNS日志,如下所示:

代码语言:javascript
复制
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)

在每一行的末尾,您将看到表示如下的域名:

代码语言:javascript
复制
(7)master2(10)teamviewer(3)com(0)

我只想得到以下几部分:

代码语言:javascript
复制
master teamviewer com 

并将空格替换为“。”得到这样的结果:

代码语言:javascript
复制
master2.teamviewer.com 

为此,我使用了这个regex:

代码语言:javascript
复制
(?<=\)).*?(?=\()

但不幸的是,我得到了一个错误:

代码语言:javascript
复制
Lookbehind is not supported in javascript

有人对这个问题有什么建议或解决办法吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-04 11:05:58

您可以使用来自这篇文章的解决方案

代码语言:javascript
复制
A\s+\(\d+\)(.*?)\(\d+\)(.*?)\(\d+\)(.*?)\(\d+\)

regex演示

这里,

  • A -文字A
  • \s+ - 1+白空间
  • \(\d+\) -用()括起来的1+数字
  • (.*?) -任何0+字符,尽可能少(因为*?是一个懒惰的量词)
  • \(\d+\)(.*?)\(\d+\)(.*?)\(\d+\) -上述两个子模式的交替序列。

根据需要设置Capture Group选项。在上面的例子中,

代码语言:javascript
复制
Format String : $1.$2.$3
票数 1
EN

Stack Overflow用户

发布于 2017-05-04 08:55:10

你可以试试这个:

代码语言:javascript
复制
\(\d+\)(?:[\w]+\(\d+\))+

Regex Demo

代码语言:javascript
复制
const regex = /\(\d+\)(?:[\w]+\(\d+\))+/g;
const str = `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)
`;
let m;

while ((m = regex.exec(str)) !== null) {
console.log(m[0].split(/\(\d+\)/).filter(val => val).join("."));
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43777678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档