区间表达式 单个表达式匹配多字符
最简单的正则表达式ab匹配于ab, ..(两个点号)匹配于任意两个字符,但是在单个字符后面加上修饰符(modifier)meta之后,能够实现更强大的功能。
例如,ab*c
表示“匹配一个a,0或多个b,以及a c”,所以这个正则表达式匹配的有ac, abc, abbc, abbbbbc等,但类似于aQc, akc等是不匹配的。
*修饰符虽然好用,但是不能明确表达*要匹配几个字符,此时需要引进区间表达式。
区间表达式 是将一个或两个数字放在\{与\}之间,有以下三种情况:
\{n\} %前置正则表达式所得结果重现n次
\{n,\} %前置正则表达式所得结果至少重现n次
\{n,m\} %前置正则表达式所得结果重现n至m次
例:
(1)重现5个a a\{5\}
(2)重现10到42个qq\{10,42\}
文本匹配锚点
文本匹配锚点(anchor)主要指两个meta字符,一个是\^,另一个是$,关于他们的具体用法,用以下例子来展示:
假定匹配文本为abcABCdefDEF,正则表达式内锚点范例如下表:
模式 | 是否匹配 | 匹配文本及理由 |
---|---|---|
ABC | 是 | 居中的第4,5,6个字符:abc**ABC**defDEF |
^ABC | 否 | 限定匹配字符串的起始处 |
def | 是 | 居中的第7,8,9个字符:abcABC**def**DEF |
def$ | 否 | 限制匹配字符串的结尾处 |
[[:upper:]]{3} | 是 | 居中的第4,5,6个字符:abc**ABC**defDEF |
[[:upper:]]{3}$ | 是 | 结尾的第10,11,12个字符:abcABCdef**DEF** |
^[[:alpha:a]]{3} | 是 | 起始的第1,2,3个字符:**abc**ABCdefDEF |
\^和$也可以同时使用,这种情况是将括起来的正则表达式匹配整个字符串或行,例如,使用\^$ 删除扩展文件里的空行:
$ cc -E foo.c | grep -v '^$' >foo.out
运算符的优先级(从高到底排序)
运算符 | 表示意义 |
---|---|
[..][==][::] | 用于字符排序的方括号符号 |
\metacharacter | 转义的meta字符 |
[] | 方括号表达式 |
\(\) \digital | 子表达式与后项引用 |
* \{ \} | 前置单个字符重现的正则表达式 |
无符号 | 连续 |
^ $ | 锚点 |