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

Why isn't the following regex working with the following modifications (Vim)?

几个小时前我问过这个问题:

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

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

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

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

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

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

它说 "Pattern not found",与任何内容都不匹配。

如何解决这个问题?

仅当 -> 紧跟在 := 后(模空格)时,正则表达式才匹配。

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

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

与原始版本的不同之处在于附加的 [^\-]+ 部分跳过了函数签名(->- 在这里用作阻止程序)。

请注意,当 - 列为正则表达式字符 class 中的最后一项时,不需要转义(...但我养成了这样做的[坏?]习惯无论如何,在修改或复制粘贴正则表达式时它会派上用场...)。