在正则表达式中,我们把用于匹配的特殊符号又称作元字符。在 Shell 中,元字符又分为基础元字符和扩展元字符。
基础元字符
元字符 | 作 用 |
---|---|
* | 前一个字符匹配 0 次或任意多次 |
. | 匹配除换行符外的任意一个字符 |
^ | 匹配行首。例如,^hello 会匹配以 hello 开头的行 |
& | 匹配行尾。例如,hello& 会匹配以 hello 结尾的行 |
[] | 匹配屮柄号屮指定的任意一个字符,而且只匹配一个字符。例如.[aoeiu]匹配任意一个元音字母, [0-9] 匹配任意一位数字,[a-z][0-9] 匹配由小写字母和一位数字构成的两位字符 |
[^] | 匹配除中括号中的字符以外的任意一个字符。例如,[^0-9] 匹配任意一位非数字字符,[^a-z] 匹配任意一位非小写字母 |
\ | 转义符,用于取消特殊符号的含义 |
\{n\} | 表示其前面的字符恰好出现 n 次。例如,[0-9]{4} 匹配4位数字,[1][3-8][0-9]\{9\} 匹配手机号码 |
\{n,m\} | 表示其前面的字符至少出现 n 次,最多出现 m 次。例如,[a-z]\{6,8\} 匹配 6〜8 位的小写字母 |
扩展正则表达式
扩展元字符 | 作 用 |
---|---|
+ | 前一个字符匹配 1 次或任意多次。如“go+gle”会匹配“gogle” “google”或“gooogle”。当然,如果“o”有更多个,则也能匹配 |
? | 前一个字符匹配 0 次或 1 次。如 “colou?r” 可以匹配 “colour” 或 “color” |
| | 匹配两个或多个分支选择。如“was|his”既会匹配包含“was”的行,也会匹配包含“his”的行 |
() | 匹配其整体为一个字符,即模式单元。可以理解为由多个单个字符组成的大字符。如“(dog)+”会匹配“dog” “dogdog” “dogdogdog”等,因为被()包含的字符会被当成一个整体。但 “hello(world |
例1:"*"前一个字符匹配0次或任意多次
注:"*“和通配符中的”*"含义不同,它代表前一个字符重复 0 次或任意多次。比如,"is*"并不是匹配"is"后面的任意字符,而是可以匹配所有内容,包括空白行
例2:"."匹配除换行符外的任意一个字符
注:"."只能匹配一个字符,这个字符可以是任意字符
例3:"^“匹配行首,”$“匹配行尾
例4:”[]"匹配中括号中指定的任意一个字符,且只匹配一个字符
注:"[]"会匹配中括号中指定的任意一个字符,注意只能匹配一个字符。比如 [ao] 要么匹配 a 字符,要么匹配一个 o 字符
例5:"[^]"匹配除中括号的字符以外的任意一个字符
注:如果"^“在 [] 外,则代表的是行首;如果在 [] 内,则代表的是取反。比如” ^ [a-z]"会匹配以小写字母开头的行,而 " ^ [A-z] "会匹配不以小写字母开头的行,这里^ [^a-z] 会匹配不以小写字母开头的行。
例6:"“转义符
第一个是没有加”"转义符的,可见已经匹配错误,第二个是加了。
注:转义符会取消特殊符号的含义。如果想要匹配使用".“结尾的行,那么正则表达式是”.$“是不行的,因为”.“在正则表达式中有特殊含义,代表任意一个字符。所以需要在前面加入转义符,如”\.\$"。
例7:"{n}“表示其前面的字符恰好出现 n 次
例8:”{n,}“表示其前面的字符出现不少于 n 次
例9:”{n,m}"表示其前面的字符至少出现n次,最多出现m次