几小时前我问了这个问题:Match first word at the beginning of a line (Vim)。
匹配:=
和(
之前一行开头的第一个单词:
\S\+\ze\s*[:=]\s*(
然后我把它变成了一个非常神奇的版本:
\v\S+\ze\s*[:=]\s*\(
一切都好。当我将(
字符更改为->
字符时出现了问题:
/\v\S+\ze\s*[:=]\s*\-\>
它说“找不到图案”,与任何东西都不匹配。
如何解决这个问题?
答案 0 :(得分:1)
正则表达式仅在->
紧跟:
或=
后立即匹配(模数为空白)。
但是,鉴于你的original post,你正在将正则表达式应用于某种函数定义,其语法包括签名(即函数列表+语法糖)。因此,为了匹配您的正则表达式必须迎合签名部分,有效地跳过它。假设-
不是签名部分中的有效字符,则以下修改的正则表达式将起到作用:
/\v\S+\ze\s*[:=][^\-]+\-\>
与原始版本的差异是跳过功能签名的额外[^\-]+
部分(-
的{{1}}在此处充当阻止程序。)
请注意,->
在列为正则表达式字符类中的最后一项时不需要进行转义(...但是我已经养成了[不好?]的习惯,因为它很方便修改或复制粘贴正则表达式...)。