我可以否定 POSIX 括号表达式吗?

And*_*imm 5 regex posix

我知道我可以用 POSIX 括号表达式搜索与空格匹配的内容[[:space:]]。我可以使用 POSIX 括号表达式搜索与空格不匹配的内容吗?特别是,它应该匹配的字符包括字母和括号 ( ()。

[[:graph:]] 看起来有点含糊:

[[:graph:]] - 非空白字符(不包括空格、控制字符和类似字符)

Wik*_*żew 7

您在这里混淆了两件事:括号表达式和 POSIX 字符类。外层[...]是一个括号表达式,它可以用^紧跟在 之后的 a 取反[。甲POSIX字符类是[:+ name+:]构建体,其只能内部括号表达式。

因此,在您的情况下,[[:space:]]模式是一个括号表达式,仅包含 1 个与空格匹配的 POSIX 字符类:

  • [ - 打开一个括号表达式
    • [:space:] - 用于空格的 POSIX 字符类
  • ] - 括号表达式的右括号。

要否定它,只需^像通常的 NFA字符类一样添加: [^[:space:]]

注意我故意区分术语“括号表达式”、“POSIX 字符类”和“字符类”,因为 POSIX 和常见的 NFA 正则表达式世界遵循不同的术语。