该网页包含许多正则表达式,其中包括[]
:
http://mmcif.wwpdb.org/dictionaries/ascii/mmcif_pdbx_v40.dic
一个例子:
[][_,.;:"&<>()/\{}'`~!@#$%A-Za-z0-9*|+-]*
该页面提供了有关正在使用的正则表达式的特定风格的评论:
此处定义的正则表达式不符合 POSIX 1003.2 标准,因为它们包含特殊字符“\n”和“\t”。这些正则表达式已在 POSIX 模式下使用 Richard Stallman 的 GNU 正则表达式库 0.12 版进行了测试。
这是什么[]
意思?
答案1
以这种方式编写模式是为了避免需要]
在定义的字符类中转义字符(以及连字符)。
未转义时,]
结束字符类。但是,如果[
紧接着使用]
,则表示“结束方括号”包含在字符类中,这是一种特殊构造。
类似地,一旦您使用 打开一个字符类[
,进一步使用[
表示在字符类中包含“开方括号”,因为不允许“嵌套字符类”。
连字符 ( -
) 位于类定义最末尾也是一个特殊用例,否则,在字符类中使用连字符就表示要包含在该类中的字符范围。
因此,Regex 引擎将您的示例模式解析为:
[ {open the character class}
] {include closing bracket}
[_,.;:"&<>()/\{}'`~!@#$%A-Za-z0-9*|+ {include a bunch of characters; [().*{}|+, etc. are not special characters within a class definition}
- {include hyphen}
] {close the character class}
* {zero or more repetitions of the class}
答案2
当紧跟在左方括号后面时,右方括号仅表示其自身]
。下一个左方括号也仅表示其自己的字符[
。
$ echo "a[b" | grep '[]]'
$ echo "a[b" | grep '[[]'
a[b
$ echo "a[b" | grep '[]'
grep: Unmatched [ or [^
答案3
据我所知,[] 没有任何意义,括号用于定义字符范围。空范围没有任何意义。
现在,查看您链接中的更改日志......
1.048 2007-11-18
变化:(jdw/kh)
- 将 '[]' 添加到数据类型代码和 ucode 的允许字符中 -