Skip to main content
 首页 » 编程设计

regex之Vim 正向前瞻正则表达式

2024年06月03日30exmyth

我还是不太习惯 vim 正则表达式语法。我有这个代码:

rename_column :keywords, :textline_two_id_4, :textline_two_id_4 

我想将最后一个 id 与 VIM 正则表达式语法中的正向前瞻相匹配。

你会怎么做?

\id@=_\d$ 

这不起作用。

这个 perl 语法有效:

id(?=_\d$) 

编辑 - 答案:

/id\(_\d$\)\@= 

有人可以解释一下语法吗?

请您参考如下方法:

如果你查看 vim 帮助,没有太多需要解释的: (:h\@=)

\@=     Matches the preceding atom with zero width. {not in Vi} 
        Like "(?=pattern)" in Perl. 
        Example             matches 
        foo\(bar\)\@=       "foo" in "foobar" 
        foo\(bar\)\@=foo    nothing 

这应该与最后一个 ID 匹配:

/id\(_\d$\)\@= 

用“very magic”保存一些反斜杠:

/\vid(_\d$)@= 

其实,使用vim的\zs\ze看起来更直接:

id\ze_\d$