POSIX 定义了两种正则表达式语法:基本正则表达式(BRE)和扩展正则表达式(ERE)。
下表为meta字符
字符 | BRE/ERE | 模式含义 |
/ | 两者皆可 | 关闭后续字符的特殊意义 |
. | 两者皆可 | 匹配任何单个的字符,NULL除外 |
* | 两者皆可 | 匹配在之前的任何数目的单个字符。如.*代表匹配任意字符的任意长度 |
^ | 两者皆可 | 匹配紧接着的正则表达式,在行或者字符串的起始处,^The代表行首为The |
$ | 两者皆可 | 匹配紧接着的正则表达式,在行或者字符串的结尾处 ^$匹配空行,例:cc -E foo.c | grep -v '^$' > foo.out 编译源码后删除空行 |
[...] | 两者皆可 | 匹配方括号内的任一字符,连字符-指的是连续字符的范围 |
/{n,m/} | BRE | 匹配之前的单个字符重复出现的次数,/{n/}重复出现n次,/{n,m/}重复出现n到m次,/{n,/}至少重复出现n次 |
/( /) | BRE | 把/( /)之间的模式存储在特殊的保留空间"holding space"中,最多可存9个,可通过/1到/9被重复使用在相同模式中。如/(ab/).*/1代表ab重复两次出现,中间可保存任何数目的字符。如ab123ab,或abab
常用与查找重复字以及匹配引号,如/([" ']/).*/1 匹配以单引号或双引号括起来的字,如'good', "abc"等 |
/n | BRE | /(/)内第n个子模式到该点的模式。n为1到9的数字,1由左开始 |
{n,m} | ERE | 类似于BRE的/{n,m/} |
+ | ERE | 匹配前面正则表达式的一个或多个实例 |
? | ERE | 匹配前面正则表达式的0个或1个实例 |
| | ERE | 匹配于|前或后的正则表达式 |
( ) | ERE | 匹配与方括号括起来的正则表达式群。 |
POSIX 字符集(Character class):以[:与:]将关键字组合括起来的POSIX字符集。关键字描述各种不同的字符集,例如英文字母字符、控制字符等
具体如下:
[[:alnum:]] 文本数字字符 [[:punct:]] 标点符号
[[:alpha:]] 字母字符 [[:blank:]] 制表符和空格
[[:lower:]] 小写字母 [[:sapce:]] 空白字符
[[:upper:]] 大写字母 [[:cntrl:]] 控制符
[[:digit:]] 数字 [[:print:]] 所有可打印的字符
[[:xdigit:]] 十六进制数字 [[:graph:]] 除空格外所有可打印的字符
排序符号(Collating symbol)
排序符号指的是将多字符序列视为一个单位。它使用[.与.]将字符组合括起来。排序符号在系统所使用的特定locale上各有其定义。
[[.ch.]]则匹配于ch(排序元素),但字母c或h则不是。
等价字符集(Equivalence class)
等价字符集列出的是应视为等值的一组字符,以[=与=]括住,[[=e=]]可能匹配于e、ē、ě、è、é、ê等
/<单词首, />单词尾