On Oct 18, 10:29 pm, Andy Wokula <[EMAIL PROTECTED]> wrote:
> Tony Mechelynck schrieb:
>
>
>
> > Andy Wokula wrote:
> >> ... and I don't mean join().
>
> >> I'd like to have a function like split(), except for it should collect all
> >> the _matches_ in a list.  "matchlist()" would be a good name for it,
> >> unfortunately it's already taken.
>
> >> How would I do it now?
>
> > " untested
> > " note: name, if not script-local, must start with an uppercase letter
> > function Matchlist(string,pattern)
> >    let res = '['
> >    let s = a:string
> >    let p = '\(' . a:pattern . '\).*'
> >    while match(s,a:pattern) != -1
> >            let res .= substitute (s,p,submatch(1)) . ','
> >            let s = substitute(s,a:pattern,'')
> >    endwhile
> >    if res == '['
> >            return []
> >    else
> >            let res = substitute(res,'.$',']')
> >            return eval(res)
> >    endif
> > endf
>
> > Best regards,
> > Tony.
>
> Thanks for the input, but I didn't get your function to work :-(
> Ok, for now I'll go with this:
>
> func! SplitMatch(str, pat)
>     let matpos = match(a:str, a:pat)
>     let reslist = []
>     let mendp = 0   " match (after) end position
>     while matpos >= 0
>         let mendp = matchend(a:str, a:pat, mendp)
>         call add(reslist, strpart(a:str, matpos, mendp-matpos))
>         let matpos = match(a:str, a:pat, mendp)
>     endwhile
>     return reslist
> endfunc
>
> --
> Andy


Try SplitMatch("aba","b*").
I would go for

let res= []
call substitute(str,pat,'\=add(res,submatch(0))','g')

1000 ways to kill a cow.

-ap


--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui