Linux正则表达式-POSIX字符类


POSIX标准对正则表达式字符和操作符的含义进行了形式化。这种标准定义了两类正则表达式:基本的正则表达式(BRE) , grep和sed使用这种正则表达式;扩展的正则表达式,egrep和awk使用这种正则表达式。

为了适应非英文的环境, POSIX标准增强了匹配不在英文字母表中的字符的字符类的功能。例如,法文è是一个字母字符,但是使用典型的字符类[a-z]不匹配它。该标准提供了附加的字母序列,当匹配和整理(排序)字符串数据时,这些字符序列应该被作为单个单元看待。

POSIX还改变了常用的术语,我们一直称为"字符类"的东西在POSIX标准中称为"括号表达式"。在括号表达式中,除了字符(例如a,!等等)以外,还可以由其他标记。如下:
? 字符类。由[:和:]包围的关键字组成的POSIX字符类。关键字描述了不同的字符类,例如,文字字符,控制字符等等。
? 整理符合。整理符合是多字符的序列。表示这些字符应该被看做是一个单元,它由[,和.]包围的字符组成。
? 等价类。等价类列出了应该看做是等价的字符集,例如e和è。它由地区化的字符元素(由[=和=]包围)组成。

所有的这3种结果都必须出现在括号表达式的方括号中。例如[[: alpha :]!]匹配任意单个字母字符或感叹号, [[.ch.]]匹配整理元素ch,但不只匹配字母c或字母h。在法语地区中, [[=e=]] 可以匹配任意e、è或é。下表列出了类及其匹配字符。

括号类 含义
[:alnum:] 字母数字字符
[:alpha:] 字母字符
[:cntrl:] 控制字符
[:digit:] 数字字符
[:graph:] 非空白字符(非空格、控制字符等)
[:lower:] 小写字母
[:print:] 与[:graph:]相似,但是包含空格字符
[:punct:] 标点字符
[:space:] 所有的空白字符(换行符、空格、制表符)
[:upper:] 大写字母
[:xdigit:] 允许十六进制的数字(0-9a-fA-F)

 

当厂商完全实现了POSIX标准时,这些特征逐渐向sed和awk的商业版接近。GNU awk和GNU sed支持字符类符号,但不支持另外两个括号符号。可以检查本地系统文档来查看它们是否可用。

因为这些特征还不能被广泛地应用,本站的脚本不依赖它们,而且我们要继续使用术语"字符类"来表示方括号中的字符表。

相关内容