正则表达式初解

正则表达式(Regular Expression) 是很强大的对字符串检索,过滤,替换操作匹配的工具,在平时的工作中经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。正则表达式分为基础正则表达式,扩展正则表达式。下面简单介绍

 

 

基础正则表达式

  基础正则表达式可以按元字符来分类,至于什么是元字符先别管,

  元字符可分为四类,字符匹配,次数匹配,位置匹配,分组

    1  字符匹配:以某些特定的符号来匹配某些出现不规律的字符

  .            匹配任意单个字符数字字母换行符不行

  []         匹配方括号中的任意单个字符 如:[abcd]  匹配a,b,c,d四个字符中的任意一个 [0-9]匹配任意数字一次  [a-z] 匹配任意字母一次

  [^]       这个与上面的正好相反,匹配非方括号中的字符任意一次,如[^abcd] 匹配非a,b,c,d 以外的任意字符,表示取反

  [:alnum:]            匹配字母和数字 [A-Za-z0-9]

  [:alpha:]        字母大小写字符,亦即 A-Z, a-z

  [:lower:]      小写字母 

     [:upper:]               大写字母 

  [:blank:]     空白字符(空格和制表符)

  [:space:]     水平和垂直的空白字符这个匹配包含[:blank:]

  [:cntrl:]       不可打印的控制字符(退格)

  [:digit:]       十进制数字     [0-9]

  [:xdigit:]    十六进制数字  

  [:graph:]      可打印的非空白字符 

  [:print:]                   可打印字符 

  [:punct:]                  标点符号 

  2.次数匹配,上面介绍了以某个特定的符号或者标志来匹配字符,但是当往往需要处理的字符或者文本都很大,所以,次数匹配就很重要了。

     猜到了吗? 没错,一样的次数匹配就是以某些特定的符号来代表字符出现的次数。如下

  *        匹配前面的字符任意次,包括0次 但是它会尽可能多的匹配次数,称之为贪婪模式,所以需要注意。如.*可以匹配空行,也能匹配任意内容

  \?         匹配其前面的字符0或1次 

  \+              匹配其前面的字符至少1次 

  \{n\}           匹配前面的字符n次     

  \{m,n\}       匹配前面的字符至少m次,最多n次    

  \{,n\}     匹配前面的字符至多n次 

  \{n,\}                匹配前面的字符至少n次 

 

  2. 位置匹配,什么叫位置匹配,在处理的文件的过程中,我们很多时候无法确定他是第多少个字符,前面是什么后面是什么,我们只需关心的是开头和结尾

   ^    匹配行首

  $     匹配行尾

  以上两个可以组合可以匹配空行如:^$ 

  那么  ^[[:space:]]*$ 代表什么意思?

  位置匹配还有 /< 与  />    什么意思呢 ?  如 /<a  这个表示的是匹配a开头的单词  反之   a/>匹配以a结尾的单词  这就是单词位置匹配

  需要注意的是数字下划线不算单词 /<  与  />   可以用 /b来代替   /ba 与 a/b 

  \<word\> 就是匹配整个单词 

  1.3.4 分组,讲一个或者多个字符分在一起合为一个整体,方便对它的引用

  \(\)           如 \(hello linox\)  这样就把两个字符串合成一个组,可以使用\1 对他引用,如果有第二个组就使用\2引用,以此类推,

        当组当中包含组时,最外的组是第一个组  如 \(group1\(group2\)\)  最外的组是\1组但是他的内容是group1group2

 

  \|            或者符号  如  a\|b 匹配a或者b

扩展正则表达式

  扩展正则表达式是都基础正则表达式的延申,内容不多,但是很重要,是可以说是对基础正则的简化,因为扩展正则表达式很多特定的匹配不需要\符号

  扩展正则表达式的字符匹配与基础正则一样。

  次数匹配

    

    *        匹配前面的字符任意次,包括0次 但是它会尽可能多的匹配次数,称之为贪婪模式,所以需要注意。如.*可以匹配空行,也能匹配任意内容

  ?         匹配其前面的字符0或1次 

  +              匹配其前面的字符至少1次 

  {n}           匹配前面的字符n次     

  {m,n}       匹配前面的字符至少m次,最多n次    

  {,n}     匹配前面的字符至多n次 

  {n,}                匹配前面的字符至少n次 

  看到没有,扩展正则其实与基础正则一样,只是扩展正则不需要转义而已  

  总结:基础正则与扩展正则,但是在Linux系统中有些命令只可使用基础,又命令使用扩展,也有两者皆可。使用方式一样

相关文章