为什么以下正则表达式不能使用以下修改 (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 中的最后一项时,不需要转义(...但我养成了这样做的[坏?]习惯无论如何,在修改或复制粘贴正则表达式时它会派上用场...)。
几个小时前我问过这个问题:
匹配 :=
和 (
之前行首的第一个单词:
\S\+\ze\s*[:=]\s*(
然后我把它变成了一个很神奇的版本:
\v\S+\ze\s*[:=]\s*\(
一切正常。当我将 (
字符更改为 ->
字符时出现问题:
/\v\S+\ze\s*[:=]\s*\-\>
它说 "Pattern not found",与任何内容都不匹配。
如何解决这个问题?
仅当 ->
紧跟在 :
或 =
后(模空格)时,正则表达式才匹配。
但是,鉴于您的 -
不是签名部分中的有效字符,以下修改后的正则表达式将起到作用:
/\v\S+\ze\s*[:=][^\-]+\-\>
与原始版本的不同之处在于附加的 [^\-]+
部分跳过了函数签名(->
的 -
在这里用作阻止程序)。
请注意,当 -
列为正则表达式字符 class 中的最后一项时,不需要转义(...但我养成了这样做的[坏?]习惯无论如何,在修改或复制粘贴正则表达式时它会派上用场...)。