Regex:多个捕获组——搜索和替换——DNS日志



遇到一个正则表达式问题,需要帮助。基本上,我有这样的DNS日志:

8/21/2014 9:32:20 AM 0E5C PACKET  000000298F0CA280 UDP Rcv 10.2.56.13      136b   Q [0001   D   NOERROR] PTR    (2)25(2)21(1)5(2)10(7)in-addr(4)arpa(0)
8/21/2014 9:32:20 AM 0E60 PACKET  000000298EE81DF0 UDP Rcv 10.2.4.60       7d30   Q [0001   D   NOERROR] A      (14)usca-cdst-sw01(3)domain(3)com(0)
8/21/2014 9:32:20 AM 0E60 PACKET  00000029936FBF70 UDP Rcv 10.2.4.60       ce83   Q [0001   D   NOERROR] A      (14)usca-edge-sw01(3)domain(3)com(0)
8/21/2014 9:32:20 AM 0E60 PACKET  0000002990241FD0 UDP Rcv 10.2.4.60       1753   Q [0001   D   NOERROR] A      (14)usca-edge-sw02(3)domain(3)com(0)
8/21/2014 9:32:20 AM 0E60 PACKET  000000298EE81DF0 UDP Rcv 10.2.4.60       14b1   Q [0001   D   NOERROR] A      (14)ussp-usrv-rt01(3)domain(3)com(0)
8/21/2014 9:32:20 AM 0E60 PACKET  00000029936FBF70 UDP Rcv 10.2.4.60       db29   Q [0001   D   NOERROR] A      (14)usxo-core-vg02(3)domain(3)com(0)
8/21/2014 9:32:20 AM 0E60 PACKET  0000002990241FD0 UDP Rcv 10.2.29.29      3987   Q [0001   D   NOERROR] PTR    (3)247(1)4(1)5(2)10(7)in-addr(4)arpa(0)
8/21/2014 9:32:20 AM 0E60 PACKET  0000002990241FD0 UDP Rcv 10.2.29.29      0abd   Q [0001   D   NOERROR] PTR    (3)219(2)14(1)1(2)10(7)in-addr(4)arpa(0)
8/21/2014 9:32:20 AM 0E60 PACKET  000000298EE81DF0 UDP Rcv 10.2.4.60       42b1   Q [0001   D   NOERROR] A      (14)brca-rvrb-wo01(3)bru(3)domain(3)com(0)

在每个事件的末尾,您将看到类似于"(14)ussp-usrv-rt01(3)domain(3)com(0)"的内容。"

基本上,我正试图写正则表达式将其转换为"ussp-usrv-rt01.domain.com"

我的策略是捕获NOERROR]s+w+s+到行尾之后的所有内容,然后用句号替换括号。很难做到恰到好处。

有什么建议吗?谢谢!

考虑到您的主机名有各种各样的格式(主机名,reversePTR名称等),您可能最好分两个阶段完成:

/s((.*))$/

来捕获(3)216....arpa(0),那么你可以使用

implode('.' , preg_split('|(d+)|', ...))

将单个(数字)位分解并与.重新组合。

最新更新