一个正则表达式是由普通字符以及特殊字符(也称元字符)组成的匹配模式。把该模式与数据文件、其它命令的输出等对象进行匹配。
注:区分shell正则表达式中的元字符与shell命令中的通配符,两者不同,切勿混淆。
shell元字符
^ 行首定位符(当^位于正则表达式的第一个字符时,它表示行首定位符;否则,它匹配字符^)
/^Bobby/
Here is a tongue twister:
Bobby Bippy bought a bat.
Bobby Bippy bought a ball.
$ 行尾定位符(当$位于表达式的最后一个字符时,表示行尾定位符;否则匹配字符$)
/Bobby$/
But so boldly Bobby banged it
That he burst his rubber ball, "Boo!" cried Bobby
/^$/ 匹配一个空行
\< 词首定位符
/\<Bo/
That he burst his rubber ball,"Boo!" cried Bobby
Bobby Bippy bought a ball.
\> 词尾定位符
/ball\>/
Bobby Bippy bought a ball
在一个表达式搭配使用词首定位符与词尾定位符
/\<hole\>/
John's ball fell into the hole
John cried because it is his whole life
. 匹配任何除换行符之外的单个字符(换行符的匹配模式/\n/)
/B...y/
Bobby Bippy bought a bat.
Bobby Bippy bought a ball.
[] 匹配一组字符里的任意一个字符(不管[]的形式多复杂,它只匹配一个字符)
[abc] 匹配单个字符a或b或c
/[bw]all/
WIth his bat Bob banged the ball
Banged it bump against the wall
[a-z] 匹配小写字母a-z之一
[a-z A-Z 0-9] 匹配任意英文字母或数字之一(-字符出现在[]的首或尾位置时是普通字符)
/B[a-z]p/
Bobby Bippy bought a bat.
Bobby Bippy bought a ball.
[^] 匹配不在指定范围内的字符(区别与行首定位符,一定是在[]的首位置出现)
[^ab^c] 匹配不是a或b或^或c的任意一个字符
/all[^a-z A-Z 0-9]/ 匹配all后加有一个特殊字符的字串
Bobby Bippy bought a ball.
Bad luck ball, Bad luck Bobby, bad luck ball.
前导字符
* \ \? \+ \{n,m\} 所谓前导字符,表示紧贴于元字符前面的单个普通字符或上面所述的元字符。
* 用于修饰前导字符,表示前导字符出现任意多次(包括0次)
\ 转义字符
\? 用于修饰前导字符,表示前导字符出现0或1次
\+ 用于修饰前导字符,表示前导字符出现1次或1次以上
\{n,m\} 用于修饰前导字符,表示前导字符出现n至m次
a* 匹配连续的任意(也包括0个)a
例:
/al*/
Bobby Bippy bought a bat.
With his bat Bob banged the ball
.* 匹配连续的任意(也包括0个)任意字符,也称万能匹配
a\? 匹配0或1个a
a\+ 匹配1或多个a
a\{3,5\} 匹配3至5个连续的a
\.* 匹配0个或多个连续的.
此外,\{n,m\}还有其它几种形式:
\{n\} 匹配连续的n个前导字符
\{n,\} 匹配至少连续的n个前导字符
\?等价于\{0,1\} *等价于\{0,\} \+等价于\{1,\}
一些例子
[0-9]\{2\} 连续的两位数字
[0-1][0-9][-/][0-3][0-9][-/][0-9]\{2\} 表示时间格式MM-DD-YY或MM/DD/YY
80[234]\?86 将匹配8086,80286,80386,80486
/\<Bob.*all\>/
Bobby Bippy bought a ball
With his bat Bob banged the ball
扩展模式匹配
*(模式表) 匹配给定模式表中的”模式“0次或多次,各模式之间用|分开。
file*(.c | .o) 将匹配文件file file.c file.o file.c.c file.o.o file.c.o file.o.c等,不匹配file.h或file.s等
+(模式表) 匹配给定模式表中的”模式“1次或多次,各模式之间用|分开。
file+(.c | .o) 匹配file.c file.o file.c.c file.o.o file.c.o file.o.c等,但不匹配file
?(模式表) 匹配模式表中的”模式“0次或1次,各模式之间以|分开。
file?(.c | .o) 只匹配file file.c 和file.o
@(模式表) 匹配模式表中给定”模式“的一次出现,各模式之间以|分开。
file@(.c | .o) 匹配file.c file.o
!(模式表) 除给定模式表中的模式之外,它可以匹配其它任何一个。
没有评论:
发表评论