Search code examples
regexvimfindnegative-lookbehind

strange behavior in vim with negative look-behind


So, I am doing this search in vim:

/\(\(unum\)\|\(player\)=\)\@<!\"1\"

and as expected it does not match lines that have:

player="1" 

but matches lines that have:

unum="1" 

what am i doing wrong? isn't the atom to be negated all of this: \(\(unum\)\|\(player\)=\)

naturally just doing: /\(\(unum\)\|\(player\)=\) matches unum= or player=.


Solution

  • Your pattern is

    \(
        \(unum\)\|
        \(player\)=
    \)\@<!"1"
    

    which is equivalent to

    \(
        \(unum\)\|
        \(player=\)
    \)\@<!"1"
    

    And it must be

    \(
        \(unum\|player\)=
    \)\@<!"1"
    

    Just remove one closing and one opening parenthesis.

    And, writing \" is strange: in situations where you have to escape " you also need to escape slash.