正则表达式总结1
读《精通正则表达式》,关于 egrep 的正则简单总结:
1 元字符的总结:
- 匹配开头: ^
- 匹配结尾: $
- 连字符: -
出现在中括号[] 的中间位置有效,在[]的首部无效,如[-a-b],第一个'-'为普通字符,第二个'-'为连字符 - 匹配任意一个字符: .
对于换行符的匹配,比较有争议,且未理解透彻。所以不要使用该元字符匹配换行符。 - 单词分界符: \< : 匹配单词的首部,包括空白或 - 等分隔符
\> : 匹配单词的尾部,包括空白或 - 等分隔符
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注意:非字母的字符会被认定为分隔符,如 line 2, 6egrep '\<an' 可以匹配到: 1, 3, 5, 6 行 egrep '\<an\>' 可以匹配到: 1, 5, 6 行 egrep '\an\>' 可以匹配到: 1, 2, 4, 5, 6 行 - 至少出现一次: +
该元字符前面的字符至少出现一次,可以出现多次 - 至多出现一次: ?
该元字符前面的字符至多出现一次,可以不出现 - 无限制次数出现: *
该元字符前面的字符可以出现多次,也可以不出现 - 指定出现次数范围: {min,max}
该元字符前面的字符至少出现 min 次,至多出现 max 次
2 字符组与选择分支:
- 匹配指定的字符组中的某一个字符: [字符组],如:
同时,可以使用连字符 '-' 来表示字符区域,如:
gr[ea]y,可以匹配 grey 或 grayH[1-6] <=> H[123456],可以匹配 H1,H2,H3,H4,H5和H6 - 排除匹配字符:匹配一个未指定的字符,规则为 [字符组],如:
H[^1-6],即不匹配 H1,H2,H3,H4,H5以及H6。但是可以匹配 HH1需要说明的是,排出匹配字符的意思是:*匹配一个未列出的字符,而不是不要匹配列出的字符。两个命题的差异在于: 如果 q[u]*
1). 前者可以匹配 zaqqum,匹配到了qq,而不是去匹配 qu,故可以匹配 zaqqum;
2). 后者的意思是,由于出现了指定的字符 qu,所以不去匹配 zaqqum。 -
多选分支:相当于 "或"(or) 的匹配,如:gr[ea]y <=> gr(e|a)y <=> gr(ey|ay) <=> grey|gray都可以匹配到 grey 或 gray
需要说明的是:[a-z] 一次只能匹配该字符组中的*一个*字符!!
3 () 圆括号的作用:
- 结合 '|',限定多选范围,如 gr(e|a)y,限定多选的范围为 e 或 a
- 把多个字符组合成一个单元,收到量词修饰符(?, *, +, {min,max}) 的修饰,如把 (ea) 视作一体,(ea)+ 表示 ea 组合至少出现一次
- 捕获文本,结合 \n(n 为自然数),任何()中的文本,将储存在 \n 中,n 为 () 在正则中出现的次数,即第一次出现存在 \1 中,第 n 次出现存储在 \n 中
4 转义字符 '\' 的作用:
- 把元字符转义成普通字符
- 与普通字符结合构成元字符
- 无意义
5 杂:
- 匹配编程语言中的标识符:
标识符定义:首字符为大小写字母或 '',后面可以为大小写字母、数字和 ''
[a-zA-Z_][a-zA-Z_0-9]* - 匹配引号内的字符串:
"[^"]*"保证引号内无引号 - 匹配 24 小时制时间:
1):不能匹配 9:11 这种形式(2[0-3]|[0-1][1-9]):[0-5][0-9]
2):可能会匹配上 26:59 这种形式([01]?[0-9]|2[0-3]):[0-5][0-9] - 子表达式:单个字符或者用 '()' 定义的字符单元,可以用量词(?, *, +, {min, max}) 修饰
未完待续。。。
浙公网安备 33010602011771号