正则表达式小记
问题
正则表达式好像永远都用不熟的。(应该是用的频率不够高,所以总是碰到了就需要找网上的资料,要是没有就得看正则表达式的帮助)
其实是一个经常用的场景,就是删除带有特定关键字的行。
前天做了个记录本机DNS查询和应答的小程序,运行结束后会写文本文件,记录这些信息。
现在我需要删除所有应答的条目,我只想看电脑在这段时间内query了什么.
程序获得的记录如下:
query dns name: go.microsoft.com
query dns name: go.microsoft.com
answer ip address is CNAME go.microsoft.com.edgekey.net
answer ip address is CNAME e11290.dspg.akamaiedge.net
answer ip address is 23.219.16.121
query dns name: sbsdomains.blob.core.windows.net
query dns name: sbsdomains.blob.core.windows.net
answer ip address is CNAME blob.chi21prdstr03a.store.core.windows.net
answer ip address is 52.239.186.132
我想要将所有带IP地址的都给取掉。
方法
使用替换的方式,用正则表达式进行筛选,然后替换为空行
-
最简单的就是将带有“ip address”的行给取掉
^.*ip address.*\r?\n
直接将带有ip address的行给替换为空行,然后清理掉,这个会将answer为CNAME的也给干掉
-
过滤带有实际的IP地址的行
^.*((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))).){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))).*\r?\n
等会儿将输出的时候用log的形式,加上时间戳