在vim正则表达式语法中,我试图匹配所有开头大写的单词,而不是开始下划线
\\([A-Z][a-z_][A-Za-z_]\\+\\)
这就是我现在所拥有的。
我想要这样的事情:
\\([A-Z^\_][a-z_][A-Za-z_]\\+\\)
其中[A-Z^\\_]
表示它应该与所有大写字符匹配,但不能与下划线匹配。
任何帮助都会受到很大的影响。提前谢谢。
编辑:我的问题很糟糕。我希望第一个集合与一个大写字符匹配,它在它前面没有下划线。遗憾。
答案 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_]+
应该有用。