我知道我可以用 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/