Vim在括号内用正则表达式匹配括号?

时间:2012-12-28 06:14:45

标签: regex vim

我正在寻找一个匹配除括号括号或右括号之外的所有内容的正则表达式。基本上,这样的事情:

[^])]

但是,我认为这样的表达式不起作用,因为结束括号将关闭集合。那是对的吗?我对vim的转义系统如何​​与正则表达式一起工作有点困惑,所以我真的不确定。

2 个答案:

答案 0 :(得分:1)

你尝试过吗?因为它有效。制作文件:

test[test]test
test(test)test

然后执行

:%s/[^])]//g

你将被留下

]
)

(我虽然使用set magic,YMMV)

编辑:在set nomagic中,\[^])]将有效。

这不仅限于vim - 例如,Ruby做同样的事情。关键是将结束括号作为类中的第一个字符。理由是,如果你不想在其中至少包含一个字符,你就不会打开字符类,所以如果它是第一个(在可选的否定运算符之后),你可以匹配右括号

同样,为了匹配插入符^,它不能是第一个字符,并且要匹配短划线-,它必须是第一个或最后一个(如果你想要它必须是最后一个也匹配],这是第一个点。)

答案 1 :(得分:0)

是的,您需要使用'\'来逃避它们:

[^\])]

编辑:显然在这种情况下没有必要......并且在')'之前加上'\'并不会逃避它,但会将'\'添加到不匹配的字符中。我仍然会逃避']'但是......

编辑2 vim documentation涵盖了这种情况。

  

在集合中包含文字']','^',' - '或'\',put   在它之前的反斜杠:“[xyz \]]”,“[\ ^ xyz]”,“[xy \ -z]”和“[xyz \\]”。   (注意:POSIX不支持以这种方式使用反斜杠)。对于   ']'你也可以把它作为第一个角色(跟随一个可能的   “^”):“[] xyz]”或“[^] xyz]”{不在Vi中}。