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

标签 regex posix

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

[[:graph:]] - Non-blank character (excludes spaces, control characters, and similar)

最佳答案

你在这里混淆了两件事:bracket expression and a POSIX character class .外[...]是一个括号表达式,它可以用 ^ 否定紧随其后的是 [ . POSIX 字符类是 [: + name + :]仅在括号表达式内工作的构造。

因此,就您而言,[[:space:]] pattern 是一个括号表达式,只包含 1 个与空格匹配的 POSIX 字符类:

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

  • 要否定它,只需添加 ^像往常一样 NFA character classes :[^[:space:]] .

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

    关于regex - 我可以否定 POSIX 括号表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42683219/

    相关文章:

    javascript - 正则表达式 - 仅数字、字符和空格

    regex - 在插入时从字符串中删除特殊字符?

    .net - 正则表达式 - 只匹配 7 个字符?

    mysql - 如何使用 spring-data-jpa 对具有持久关系的实体执行 native 查询

    c - 在基于 `fork()` 的服务器中监听 UDS 和 TCP 套接字的正确方法是什么?

    linux - 是否可以向属于不同用户的进程发送信号?

    Java 替换 Matcher

    multithreading - 如果posix互斥锁被解锁同时锁定了多个线程,会发生什么情况?

    c - 我们需要在 wordexp 失败时调用 wordfree 吗?

    c - C/POSIX 语言环境中扩展字节/字符的行为