正则表达式_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"的字符串