正则表达式我理解的不深,所以不做什么评论,这里只是对这几天学习正则表达式的一个总结,希望对那些没有接触过正则表达式的有所帮助,当然了,对我自己的帮助也是挺大的...
正则表达式(REGEXP)regularexpression又可分为基本正则表达式和扩展正则表达式,下面我们先来总结一下基本正则表达式.
提到基本正则表达式我们就不得不到一个单词‘grep’.grep是使用基本正则表达式定义的模式来过滤文本的命令,也就是根据基本正则表达式定义的模式去搜索文本中与之符合的内容,并将其显示出来.我们先来看看grep的相应选项:
grep的执行格式为:grep[option]PATTERN[FILE...]
grep:上面已经解释过了这里就不多解释什么了,下面看看其相应的选项有何作用
-i:在匹配过程中忽略字符大小写,比如匹配hi这个词(下面会介绍怎么定义匹配条件),如果在匹配的时候加上‘-i’,那么结果就会把包含了HI,Hi,hi,hI这四种情况都显示出来,这样讲应该能表达清楚这个选项的意思了...
-v:反向查找,显示没有被条件匹配到的行.也就是跟定义条件相同的行不显示,而显示跟定义条件不同的行.
-o:只显示被模式匹配到的字符串,每串一行.即不考虑文本中的其它信息,只将跟定义条件相同的字符串显示出来,不管文本中有多少行每行有几个,显示出来的只是每行一个直至将匹配到的字符串完全显示出来.
--color:把匹配到的项用跟其它字符不同的颜色显示出来
-A#:显示被匹配到的行的前面的#行,加上匹配到的行一共显示#+1行
-B#:跟-A功能相似,只不过显示的是被匹配到的行的后面的#行
常用的大概也就这么多了,下面我们来谈谈关于正则表达式的常用字符
我们先简单介绍一下正则表达式的常用字符,然后再举例说明:
元字符:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集合:
空白字符[:space:]
标点符号[:punct:]
小写字母[:lower:]或[a-z]
大写字母[:upper:]或[A-Z]
大小写字母[:alpha:]或[a-zA-Z]
数字[:digit:]或[0-9]
数字和大小写字母[:alnum:]或[0-9a-zA-Z]
匹配次数:
*:匹配其前面的字符任意次
.*:任意长度的任意字符
\?:匹配其前面的字符一次或0次
\{m,n\}:匹配其前面的字符至少m次,最多n次
位置锚定:
^:锚定行首,紧跟此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
^$:空白行
\<:锚定词首,其后面的任意字符必须作为单词的首部出现,也可以用\b替换,必须放在定义的单词前面
\>:锚定词尾,其前面的任意字符必须作为单词的尾部出现,也可以用\b替换,必须放在定义的单词后面
分组:
\(\):将括号内的\之前的内容视为一个整体,无论要对其执行什么操作都要整体出现,也就是一荣俱荣,一损俱损
后向引用:引用分组括号内的所有内容
\1:引用第一个出现的分组的内容
\2:引用第二个出现的分组的内容
……
下面我们举例来说明一下:
如:grep-i^s/proc/meminfo这个命令代表就是显示/proc/meminfo文件中以s开头的行并且不区分大小写.我们来分析一下,grep后面-i首先定义了要查看的内容不区分大小写,然后^s我们知道^是锚定行首,由定义可以知道^s代表的是以s开头的行,后面跟的是要查看的文件的位置.其实可以用grep^[sS]/proc/meminfo来替换它,^[sS]表示的是以s或S开头的行,这两条命令的执行结果是相同的.
我们再来看一条命令grep'nologin$'/etc/passwd,grep和/etc/passwd就不用分析了,那’nologin$’是什么意思呢,我们知道$是锚定行尾的,那么由此可知’nologin$’代表的意思就是以nologin结尾的行。
假如现在让查找这样的一行,显示某文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;那么这条命令该怎么写呢?grep'^\([0-9]\).*\1$'XXX(后面的XXX代表文件地址)我们来分析一下单引号里的内容,^是锚定行首的意思而后面的\([0-9]\)是一个整体表示一个数字\(\)代表的事分组,这里是为了后面的引用.*是任意长度的任意字符\1是引用前面括号里的内容$是锚定行尾,连起来就是以数字开头,中间跟任意长度的任意字符并且以与开头数字相同的数字结尾;
到这里我们应该对基本正则表达式的用法有了一个初步的了解,下面我们再来看一下扩展正则表达式.
其实扩展正则表达式与基本正则表达式用法是一致的,只不过其匹配条件的字符不尽相同,而且扩展正则表达式把grep换成了egrep,两者相同的部分在这里就不做详细介绍了,下面我们来简单介绍一下扩展正则表达式:
扩展正则表达式的与基本正则表达式的很多匹配条件字符都是相同的:
如:.[][^]*?其用法和所代表的意思都是相同的,把\{m,n\}简化了点,直接{m,n}就把意思表达完整了,把分组的也简化了一下,直接用()就可以,而且后向引用不变.扩展正则表达式增加了+和|,+表示的是匹配其前面字符至少一次多者不限,|表示的是or或者的意思,C|cat表示C或者c,如果是(C|c)at那就表示的是Cat或者cat了;
扩展正则表达式与基本正则表达式用法一致在这里就不做详细介绍了。
2013.03.06