Regex 为什么POSIX中的字符类中有双括号?

Regex 为什么POSIX中的字符类中有双括号?,regex,Regex,在POSIX中,为什么像[[:digit:]这样的字符类有双括号?外括号和内括号的意思相同吗?谢谢?外括号表示包含匹配项的任何字符。[:digit://code>是POSIX“任意数字”字符类。例如,[:digit:[:alpha:]说“任何数字或任何字母字符”。在ASCII中,[:digit:][:alpha:][]相当于[0-9a-zA-Z]定义了一组字符。说“匹配一个类指定的字符”[:digit://code>是一个POSIX字符类,[…]在这里是一个括号表达式 POSIX类表示法仅在括号

在POSIX中,为什么像
[[:digit:]
这样的字符类有双括号?外括号和内括号的意思相同吗?谢谢?

外括号表示包含匹配项的任何字符。
[:digit://code>是POSIX“任意数字”字符类。例如,
[:digit:[:alpha:]
说“任何数字或任何字母字符”。在ASCII中,
[:digit:][:alpha:][]
相当于
[0-9a-zA-Z]

定义了一组字符。说“匹配一个类指定的字符”
[:digit://code>是一个POSIX字符类,
[…]
在这里是一个括号表达式

POSIX类表示法仅在括号内的表达式中有效。例如
[:digit://code>如果不在括号内的表达式中,将不会被读取为POSIX命名类。相反,在大多数情况下,它是包含字符的字符类(
d
i
g
t
)字面意思。

那么何时只使用一对括号?何时不使用POSIX字符类?何时只使用一对括号?例如,当您想要匹配字母或数字的任何字符时,
[a-z0-9]
@Tim Never。除非您想以令人困惑的方式匹配等价的
[:digt]
(与列出的任何字符匹配的普通正则表达式字符类)。POSIX字符类是一种特殊的元序列,其形式为
[:::]
,只能在括号内的表达式/正则表达式字符类中使用。为了完整性,在一些情况下,字符类可以在正则表达式之外使用,在这些情况下,
[
..
]
中不一定包含字符类。一个著名的例子是
tr
实用程序,其中将小写转换为大写看起来像
tr'[:lower:]['[:upper:]['