跳到主要内容

4.5 使用POSIX字符类

对元字符以及各种字符集合进行的讨论,必须要提到 POSIX 字符类。POSIX 字符类是许多(但并不是所有)正则表达式实现都支持的一种简写形式。

注意

Javascript 不支持在正则表达式里使用 POSIX 字符类,也就是说本站提供的正则表达式练习工具不支持 POSIX 字符类。

POSIX 语法与我们此前见过的元字符不太一样。为了演示 POSIX 字符类的用法,我们来看前一章里的例子,利用正则表达式从一段 CSS 代码里把 RGB 值查找出来:

#[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]
在工具中查看
body {
  background-color: #336633;
  color: #ffffff;
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

分析

在前一章里使用的模式是重复写出的 6 个 [0-9A-Fa-f] 字符集合,把那 6 个 [0-9A-Fa-f] 全部替换为 [[:xdigit:]] 就得到这个模式。它们的匹配结果完全一样。

注意

这里使用的模式以 [[ 开头、以 ]] 结束(两对方括号)。这是使用 POSIX 字符类所必须的。POSIX 字符类必须括在 [::] 之间,我们使用的 POSIX 字符类是 [:xdigit:] (不是 :xdigit: )。外层的 [] 字符用来定义一个字符集合,内层的 [] 字符是 POSIX 字符类本身的组成部分。

字符类说明
[:alnum:]任何一个字母或数字(等价于 [a-zA-Z0-9]
[:alpha:]任何一个字母(等价于 [a-zA-Z]
[:blank:]空格或制表符等价于 [\t ]
[:cntrl:]ASCII 控制字符(ASCII 0 到 31 和 ASCII 127)
[:digit:]任何一个数字(等价于 [0-9]
[:print:]任何一个可打印字符
[:graph:][:print:] 一样,但不包括空格
[:lower:]任何一个小写字母(等价于 [a-z]
[:upper:]任何一个大写字母(等价于 [A-Z]
[:punct:]既不属于 [:alnum:] 也不属于 [:cntrl:] 的其他字符
[:space:]任何一个空白字符,包括空格(等价于 [\f\n\r\t\v ]
[:xdigit:]任何一个 16 进制数字(等价于 [a-fA-F0-9]
警告

一般来说,支持 POSIX 标准的正则表达式实现都支持上表所列出的那 12 个 POSIX 字符类,但在一些细节方面可能会与这里的描述有细微的差异。

小结

我们在第二章第三章对字符匹配操作和字符集合匹配操进行了讨论。在此基础上,这一章对用来匹配特定字符(制表符、换行符,等等)和用来匹配一个字符集合或字符类(数字、字母数字字符,等等)的元字符进行了讲解。这些简短的元字符和 POSIX 字符类可以用来简化正则表达式模式。

该内容基于 《正则表达式必知必会》 二度创作
转载请遵守原作者相关协议并注明本页地址
https://iamhefang.cn/tutorials/正则表达式/第四章-使用元字符/4.5-使用POSIX字符类