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

2016-02-19 09:52 22 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享用正则删除不包含某个字符串的行的代码,希望可以对大家能有小小的帮助。

【 tulaoshi.com - Web开发 】

先说一下这个可疑的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'开头的行,大功告成!等等,剩下的空行太难看,让我们把它们干掉,查找:^[rn]*$,替换处为空,执行全部替换,世界终于清静了...

其实本文中用的正则都是很基本的东西,虽然最终没能写出删除包含指定字符串的行的正则,但在迂回中最终也是现实了想要的功能,而且看上去也更清晰一些。有时候退一步未必不是一个更好的选择。

来源:http://www.tulaoshi.com/n/20160219/1592478.html

延伸阅读
下面两个函数均是对于一个字符串将其以某个分割符分开:   function SplitStrToArray(const tString, tSplit: String): TStringList;        //以后成为方法1,这也是《delphi超级猛料》中提到的算法   var     t_Str, t_Item: WideString;  &...
  Dim s As String = "gtdfg123fdgdfs123dd123"         Dim c() As Char = {"1", "2", "3"}         Dim a() As String = s.Split(c)         Dim p As String     ...
标签: Web开发
a href="1.htm"251/a 怎么用JS把251替换为 span style='background-color: #99FF99'251/span [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
如 现有字符串 "[]aseabcd[12345]ddxabcdsx[]",要截取"abcd[" 和 "abcd["之后的第一个 "]" 之间的内容 "12345",当然当中的内容长度不是固定的,可以是"123456" 或者其他字符串。 他问我的时候,我第一反应就是想的indexOf,后来查了下 发现mysql中没有indexOf 而是 locate。 经过半个多小时的尝试,最好帮他实现了这个效果。 代码如下: ...
标签: Web开发
Function strnum(patrn, strng)   Dim regEx, Match, Matches,xx     xx=0   Set regEx = New RegExp   regEx.Pattern = patrn   regEx.IgnoreCase = True       &nbs...

经验教程

679

收藏

40
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部