Tuesday, October 30, 2012

Re: backward reference

It works perfectly :)

2012/10/30 Ben Fritz <fritzophrenic@gmail.com>
On Tuesday, October 30, 2012 1:22:18 PM UTC-5, niva wrote:
> Hi,
>
> I am using this kind of code in order to modify line content :
>
> let patternOfxembh='^.*one="\(\d\+\)".*two="\(\d\+\)"'
> if line =~ patternOfxembh
>       echo line
> endif
>
> The recognition is working well and then I can echo my line but is it possible to do an echo of backward reference: value of \(\d\+\).
>
> I would like to avoid to use substitute and using again the same pattern on the line.
>

You cannot use the captured groups at a later time after doing a =~ or substitute().

However, you can use the matchlist() function to give you a list of all the matches which you can use later. This function returns an empty list if there are no matches, so to avoid doing regex matching twice you could do:

let lineMatches = matchlist(...)
if !empty(lineMatches)
  echo line
  ...
endif

--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

No comments: