首页 > 解决方案 > vim : 匹配正则表达式

问题描述

我想匹配一个无效的 C/C++ 行,这就是我使用下面的正则表达式的原因

/^[^#].+(.+[^;(){}])$/

使用 cmd :match errorMsg: 和我的常规验证一些简单的条件一行:

  1. 开始时没有#(预处理器 cmds)
  2. 不以 a 结尾;,(),{}

将被视为不正确的行

但它没有任何帮助

标签: regexvim

解决方案


您可以使用

/\v^[^#].*$([;(){}])@<!/

详情

  • \v- 非常神奇的模式,以避免过度转义特殊模式字符
  • ^- 一行的开始
  • [^#]#- 除(Vim 中不匹配换行符)以外的任何字符
  • .*$- 一行的其余部分,零个或多个字符 ( .*) 和行尾 ( $)
  • ([;(){}])@<!-否定的lookbehind , no ;, (, ), {and}被允许出现在字符串的末尾。

这是这个模式演示(转换为 PCRE 仅用于演示目的)。

它在 Vim 中工作:

在此处输入图像描述

文件内容如

abc match me
abc no match;
match
# def no MATCH{}
}
{
(
)
;

推荐阅读