为什么以下正则表达式不能使用以下修改(Vim)?

时间:2015-02-04 16:12:51

标签: regex vim

几小时前我问了这个问题:Match first word at the beginning of a line (Vim)

匹配:=(之前一行开头的第一个单词:

\S\+\ze\s*[:=]\s*(

然后我把它变成了一个非常神奇的版本:

\v\S+\ze\s*[:=]\s*\( 

一切都好。当我将(字符更改为->字符时出现了问题:

/\v\S+\ze\s*[:=]\s*\-\>   

它说“找不到图案”,与任何东西都不匹配。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

正则表达式仅在->紧跟:=后立即匹配(模数为空白)。

但是,鉴于你的original post,你正在将正则表达式应用于某种函数定义,其语法包括签名(即函数列表+语法糖)。因此,为了匹配您的正则表达式必须迎合签名部分,有效地跳过它。假设-不是签名部分中的有效字符,则以下修改的正则表达式将起到作用:

/\v\S+\ze\s*[:=][^\-]+\-\>

与原始版本的差异是跳过功能签名的额外[^\-]+部分(-的{​​{1}}在此处充当阻止程序。)

请注意,->在列为正则表达式字符类中的最后一项时不需要进行转义(...但是我已经养成了[不好?]的习惯,因为它很方便修改或复制粘贴正则表达式...)。