坚持使用正则表达式,需要一只手。基本上,我有这样的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 +之后将所有内容捕获到行尾,然后用句点替换括号。让trobule恰到好处。
有什么建议吗?谢谢!
答案 0 :(得分:0)
鉴于你的主机名有各种各样的格式(主机名,反向名称等等),你可能会分两个阶段做得更好:
/\s(\(.*\))$/
捕获(3)216....arpa(0)
内容,然后您可以使用
implode('.' , preg_split('|\(\d+\)|', ...))
爆炸个别(数字)位并改为与.
重新组合。