Hi,

On 9/18/06, Yakov Lerner <[EMAIL PROTECTED]> wrote:
On 9/19/06, Thomas Holder <[EMAIL PROTECTED]> wrote:
> Hi,
>
> when matching regular expressions with perl, backreferences will be
> stored in $1 to $9. Does vim do anything similar? I have a script with
> several lines like this
>
>   if cline =~ '^\s*[._a-z0-9]\+\s\+\([-._a-z0-9]\+\)\s\+'
>      ...
>   endif
>
> and I'd like to have the part which is in parantheses just like in perl.
>   I could not find anything about backreferences in the vim manual.

You can use substitute as follows:
let patt='^\s*[._a-z0-9]\+\s\+\([-._a-z0-9]\+\)\s\+'
if cline =~ patt
          let _1 = substitute(cline, patt, '\1', '')
          let _2 = substitute(cline, patt, '\2', '')
          let _3 = substitute(cline, patt, '\2', '')


In Vim7, you can use the matchlist() function.

 let mlist = matchlist(cline, patt)

Now, mlist[0] contains the entire match, mlist[1] contains the
first submatch, mlist[2] contains the second submatch, etc.

  :help matchlist()

- Yegappan


Yakov
P.S.
\1,\2,\1 are avaibale at the to-part of substitution
(:help submatch, :help sub-replace-special). But AFAIK,
these \1,\2,etc are not kept around after substitution or
after match.

Reply via email to