Thursday, April 23, 2015

Re: positive lookbehind

Am 2015-04-23 10:37, schrieb Claus Atzenbeck:
> Hello everybody,
>
> I came across a strange behavior of Vim. Consider the following two
> lines; the 2nd line starts with spaces.
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Test test test
> Test test test
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> I want to match each 1st word of a line, ignoring preceding white
> spaces. The expression
>
> /\v^\s*\zs\w+
>
> works perfectly, however,
>
> /\v^(\s*)@<=\w+
>
> does not. It only matches words in the very beginning of a line, but
> not those preceded by whitespaces. I cannot see why the latter would
> not be equivalent to the first expression.
>
> According to
>
> :h @<=
>
> "Vim allows non-fixed-width patterns". Thus, I would expect the
> positive lookbehind to work also for the 2nd line. (I know that \zs is
> the preferable solution anyway, but I'm curious.)
>
> Any ideas?

Well, at least, this is consistent with both regexp engines ;)

I think the problem is, that the '^' prevents a match of the following
word.
I am not sure, why this happens, or if this is expected, but what seems
to work
is to include the '^' into the capturing group, e.g.

/\(^\s*\)\@<=\w\+

That works.

Best,
Christian

--
--
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 because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: