Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vim positive lookahead regex

Tags:

regex

vim

I am still not so used to the vim regex syntax. I have this code:

rename_column :keywords, :textline_two_id_4, :textline_two_id_4 

I would like to match the last id with a positive lookahead in VIMs regex syntax.

How would you do this?

\id@=_\d$ 

This does not work.

This perl syntax works:

id(?=_\d$) 

Edit - the answer:

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

Can someone explain the syntax?

like image 623
Hendrik Avatar asked Aug 22 '13 22:08

Hendrik


1 Answers

If you check the vim help, there is not much to explain: (: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 

This should match the last id:

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

save some back slashes with "very magic":

/\vid(_\d$)@= 

actually, it looks more straightforward to use vim's \zs \ze:

id\ze_\d$ 
like image 134
Kent Avatar answered Sep 27 '22 20:09

Kent