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字符类