正则表达式_01

一、常用元字符

元字符相当于数学表达式中的运算符
\    反斜杠    转义字符,例如"\t"将匹配一个制表符Tab,而不是匹配字母"t"
|    管道    表示“或”,即匹配其中任何一个,例如“book|desk”将匹配“book”或“desk”
[]    方括号    表示将匹配指定范围内的字符,例如“[abc]”将匹配a、b和c的任意字符
[^]    方括号+插入符    匹配不在指定组内的字符,例如[^abc]
()    小括号    可以将正则字符和元字符或表达式进行组合,例如“(book|desk)s”,将匹配“books”或“desks”
{}    大括号    为前导表达式指定一个最小或最大匹配的数目,例如"a{3,4}"将匹配“aaa”或“aaaa”
^    插入符    用于指定匹配字符串的头部,也称行首定位符,例如“^hello”,将匹配开头为“hello”的字符串
$    美元符    用于指定匹配字符串的尾部,也称行尾定位符,例如“$world”,将匹配结尾为“world”的字符串
*    星号    匹配0个或多个前导表达式,例如“a*”将匹配0~n个字符“a”组成的字符串
?    问号    匹配一个前导表达式,例如“a?”将匹配“aa”
\<    反斜杠+小于号    词首定位符,例如“\<abc”表示所有包含以"abc"开头的单词的行
\>    反斜杠+大于号    词尾定位符,例如“|>abc”表示所有包含以"abc"结尾的单词的行
.    点号    匹配任意一个字符
-    减号    用于指定字符范围,例如"[a-c]"将匹配包含a、b和c中的任意字符
tips_01:有时需要查找一些包含了系统指定为特殊字符的字符或字符串.在该字符前面加上转义字符"\"即可,
一般意义上讲,下列字符可以认为是特殊字符:$ . ' " * [ ] ^ | { } \ + - ? ( )
tips_02:Linux中使用一些作为特殊字符的元字符时要加上反斜杠,如{}的使用方法为:“a\{1,2\}”,将匹配"a"和"aa"
tips_03:当正则表达式出现在字符串中时,该字符串最好使用单引号字符串表示法(即用单引号将正则表达式包括起来)

二、字符集

字符集表示一个字符范围
[a-zA-Z]    表示匹配任意一个字母
[a-z]        表示匹配任意一个小写字母
[A-z]        表示匹配任意一个大写字母
[0-9]        表示匹配任意一个数字
[0-9\*\+]    表示匹配数字、星号、加号中的任意一个
例:^[A-Z][0-9]$表示匹配一个由一个大写字母和数字组成的字符串
如果在方括号内加上"^"表示取非
例:[^a-z]表示匹配任意一个除小写字母之外的字符

三、字符类


为了方便编程,系统提供了一些预定义的字符集,称为字符类,字符类会对指定的字符范围进行定义
[[:alpha:]]    小写及大写字母,等价于[a-zA-Z]
[[:alnum:]]    小写及大写字母和数字,等价于[a-zA-Z0-9]
[[:cntrl:]]    控制字符,如制表符(tab)、换行符或反斜杠
[[:digit:]]    数字0~9,等价于[0-9]
[[:graph:]]    ASC2码在33~126之间的可打印字符
[[:lower:]]    小写字母,等价于[a-z]
[[:punct:]]    标点符号,包括特殊符号
[[:upper:]]    大写字母,等价于[A-Z]    
[[:space:]]    空白字符,包括空格、水平制表符、垂直制表符、换行、换页、回车
[[:xdigit:]]    十六进制字符,等价于[a-fA-F0-9]
例:查找文件中包含"数字+句号"的行:grep '[0-9]\.' 文件名  或者 grep '[[:digit:]]\.' 文件名

四、重复


*        一个单字符后紧跟*,匹配0个或多个此单字符
?         一个单字符后紧跟?,匹配0个或1个此单字符
+         一个单字符后紧跟+,匹配1个或多个此单字符
{x,y}        表示前导表达式至少出现x次,但不超过y次
{x,}        表示前导表达式出现x次或更多次
{x}        表示前导表达式只出现x次
例:[[:alpha:]]\{2,4\}    表示可以匹配任意2个、3个或4个字母组成的字符串

五、子表达式


与算术运算中使用小括号类似,在正则表达式中也可以使用小括号将字母、数字、元字符等进行组合后,再与
其他字母、数字、元字符或其他组合联合使用,组成更长的表达式
例:([wx])([yz])    可以匹配"wz"、"wy"、"xy"或"xz"
    (very) * good    可以匹配0个或多个"very"再加上"good"的字符串

posted @ 2017-11-15 16:40  fotgod  阅读(339)  评论(0编辑  收藏  举报