正则不包含字符串:用正则删除不包含某个字符串的行的代码

先说下这个可疑ip,58.63.144.170,据说是个弱智蜘蛛上帝保佑它下地狱
看过apache日志朋友应该知道apache访问日志行是以访问者ip开始日志比较大所以我是用ultraedit来看用ultraedit时候需要注意正则共有两种种是符合perl规范标准而默认是ut自带写法比较特殊本文中用到正则表达式都是perl兼容ut中这个选项可以在“高级->配置->搜索->正则表达式引擎”中进行修改
经过番思索发现自己掌握正则表达式中好象没有能直接删除“不包含”个指定串使用方法思前想后先写个包含指定串再说吧:^(58.63.144.170).*$测试可以把包含指定ip行找出来接下来要做就是如何把这些行保留下来而删除另外在尝试了N次以后我终于放弃了直接删除不包含这个ip想法如何办呢?退步海阔天空!既然不能直接删除那就迂回下吧虽然不能直接删除不包含指定串但删除不包含指定正则我还是会写:)
先给包含指定ip行做个标志这里要用到ut替换功能要查找行:^(58.63.144.170)(.*)日志行都是以数字开始所以我选择‘%'做为标志特殊符号要替换成正则为:%$1$2全部替换以后包含指定ip行就变成了这个样子:%58.63.144.170……接下来我们再把行首不是‘%'行删掉查找:^[^%].*替换处为空执行全部替换日志中只剩下了以‘58.63.144.170'开头大功告成!等等剩下空行太难看让我们把它们干掉查找:^[\r\n]*$,替换处为空执行全部替换世界终于清静了...
其实本文中用正则都是很基本东西虽然最终没能写出删除包含指定正则但在迂回中最终也是现实了想要功能而且看上去也更清晰有时候退步未必不是个更好选择
Tags:  正则表达式不包含 php正则检测字符串 正则表达式字符串 正则不包含字符串

延伸阅读

最新评论

发表评论