vim正则表达式与大写字母匹配,但不是下划线

时间:2015-05-22 07:56:20

标签: regex vim

在vim正则表达式语法中,我试图匹配所有开头大写的单词,而不是开始下划线

\\([A-Z][a-z_][A-Za-z_]\\+\\)

这就是我现在所拥有的。

我想要这样的事情:

\\([A-Z^\_][a-z_][A-Za-z_]\\+\\)

其中[A-Z^\\_]表示它应该与所有大写字符匹配,但不能与下划线匹配。

任何帮助都会受到很大的影响。提前谢谢。

编辑:我的问题很糟糕。我希望第一个集合与一个大写字符匹配,它在它前面没有下划线。遗憾。

2 个答案:

答案 0 :(得分:2)

[A-Z]已经包含下划线;我想你想匹配整个单词,所以你不希望你的正则表达式匹配里面一个单词。 Vim内置\<\>(如其他正则表达式方言中的\b,请参阅@ npinti的回答)关键字边界;因为大写/大写字母和下划线字符通常是关键字字符,所以用它们包装你的模式应该已经足够接近:

\<\([A-Z][a-z_][A-Za-z_]\+\)\>

要在匹配前严格断言下划线(但允许其他任何关键字或非关键字字符),您需要否定后瞻\@<!表示之前没有

_\@<!\([A-Z][a-z_][A-Za-z_]\+\)

答案 1 :(得分:0)

  

其中[A-Z ^ \ _]表示它应该与所有大写字符匹配,但不能与下划线匹配。

[A-Z] 已经与除下划线之外的所有大写字符匹配。但是,在第一个解决方案中,您要求第二个字母为小写或下划线([a-z_])。如果我坚持你的定义:

  

所有单词以大写开头,而不是以下划线开头

然后[A-Z][A-Za-z_]+应该有用。