Vim Regex : How to search for A AND B NOT C -


i have many lines containing names of presidents carter, bush, clinton, obama. contain 1 of names, 2, 3, 4 of them (in order).

i know how search carter , clinton , obama ->

:g/.*carter\&.*clinton\&.*obama/p 

i know how search carter , (clinton or bush) ->

:g/.*carter\&\(.*clinton\|.*bush\)/p 

(there better ways that)

but can't figure how search (and looked @ related questions), e.g., bush , clinton not carter , less how search, e.g., bush , clinton not (carter or obama).

to represent not, use negative assertion \@!.

for example, "not bush" be:

^\(.*bush\)\@! 

or using \v:

\v^(.*bush)@! 

important: note leading ^. while it's optional if use positive assertions (one match other), required anchor negative assertions (otherwise can still match @ end of line).

translating "bush , clinton , not (carter or obama)":

\v^(.*bush)&(.*clinton)&(.*carter|.*obama)@! 

addendum

to explain relationship between \& , \@=:

one&two&three 

is interchangeable with:

(one)@=(two)@=three 

the difference \& directly mirrors \| (which should more obvious , natural), while \@= mirrors perl's (?=pattern).


Comments

Popular posts from this blog

ASP.NET/SQL find the element ID and update database -

jquery - appear modal windows bottom -

c++ - Compiling static TagLib 1.6.3 libraries for Windows -