正则表达式总结1

读《精通正则表达式》,关于 egrep 的正则简单总结:

1 元字符的总结:

  1. 匹配开头: ^
  2. 匹配结尾: $
  3. 连字符: - 
    出现在中括号[] 的中间位置有效,在[]的首部无效,如[-a-b],第一个'-'为普通字符,第二个'-'为连字符
  4. 匹配任意一个字符: . 
    对于换行符的匹配,比较有争议,且未理解透彻。所以不要使用该元字符匹配换行符。
  5. 单词分界符: \< : 匹配单词的首部,包括空白或 - 等分隔符
    \> : 匹配单词的尾部,包括空白或 - 等分隔符
    eg: 
    文件 text.txt 中含有以下 6 行: 
    1. an text 
    2. test can't do this  
    3. test any thing  
    4. test can do 
    5. test an thing   
    6. test c-an-y thing
    使用以下规则:
    egrep '\<an' 可以匹配到: 1, 3, 5, 6 行
    egrep '\<an\>' 可以匹配到: 1, 5, 6 行
    egrep '\an\>' 可以匹配到: 1, 2, 4, 5, 6
    注意:非字母的字符会被认定为分隔符,如 line 2, 6
  6. 至少出现一次: + 
    该元字符前面的字符至少出现一次,可以出现多次
  7. 至多出现一次: ? 
    该元字符前面的字符至多出现一次,可以不出现
  8. 无限制次数出现: * 
    该元字符前面的字符可以出现多次,也可以不出现
  9. 指定出现次数范围: {min,max}
    该元字符前面的字符至少出现 min 次,至多出现 max 次

2 字符组与选择分支:

  1. 匹配指定的字符组中的某一个字符: [字符组],如: 
    gr[ea]y,可以匹配 grey 或 gray
    同时,可以使用连字符 '-' 来表示字符区域,如: 
    H[1-6] <=> H[123456],可以匹配 H1,H2,H3,H4,H5和H6
  2. 排除匹配字符:匹配一个未指定的字符,规则为 [字符组],如: 
    H[^1-6],即不匹配 H1,H2,H3,H4,H5以及H6。但是可以匹配 HH1

    需要说明的是,排出匹配字符的意思是:*匹配一个未列出的字符,而不是不要匹配列出的字符。两个命题的差异在于: 如果 q[u]*
    1). 前者可以匹配 zaqqum,匹配到了qq,而不是去匹配 qu,故可以匹配 zaqqum;
    2). 后者的意思是,由于出现了指定的字符 qu,所以不去匹配 zaqqum。

  3.  

    多选分支:相当于 "或"(or) 的匹配,如:
    gr[ea]y <=> gr(e|a)y <=> gr(ey|ay) <=> grey|gray

    都可以匹配到 grey 或 gray
    需要说明的是:[a-z] 一次只能匹配该字符组中的*一个*字符!!

3 () 圆括号的作用:

  1. 结合 '|',限定多选范围,如 gr(e|a)y,限定多选的范围为 e 或 a
  2. 把多个字符组合成一个单元,收到量词修饰符(?, *, +, {min,max}) 的修饰,如把 (ea) 视作一体,(ea)+ 表示 ea 组合至少出现一次
  3. 捕获文本,结合 \n(n 为自然数),任何()中的文本,将储存在 \n 中,n 为 () 在正则中出现的次数,即第一次出现存在 \1 中,第 n 次出现存储在 \n 中

4 转义字符 '\' 的作用:

  1. 把元字符转义成普通字符
  2. 与普通字符结合构成元字符
  3. 无意义

5 杂:

  1. 匹配编程语言中的标识符:
    [a-zA-Z_][a-zA-Z_0-9]*
    标识符定义:首字符为大小写字母或 '',后面可以为大小写字母、数字和 ''
  2. 匹配引号内的字符串: 
    "[^"]*"
    
    保证引号内无引号
  3. 匹配 24 小时制时间:
    1): 
    (2[0-3]|[0-1][1-9]):[0-5][0-9]
    不能匹配 9:11 这种形式
    2):  
    ([01]?[0-9]|2[0-3]):[0-5][0-9]
    可能会匹配上 26:59 这种形式
  4. 子表达式:单个字符或者用 '()' 定义的字符单元,可以用量词(?, *, +, {min, max}) 修饰

未完待续。。。

posted on 2013-05-14 19:27  灵台无镜  阅读(122)  评论(0)    收藏  举报

导航