Vim positive lookahead regex

RegexVim

Regex Problem Overview


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?

Regex Solutions


Solution 1 - Regex

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$

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHendrikView Question on Stackoverflow
Solution 1 - RegexKentView Answer on Stackoverflow