It
can be done with just a standard regexp, but it's monumentally ugly. If you want to match "root:" not followed by "bar", you get
/root: #need root
($ #it could end there
|([^b] #if not, first letter isn't b
|b($|[^a] #or it can be b if it's not
|a($|[^r]) #followed by ar
/x
(Untested, I may have gotten it a little wrong.) Suffice to say, it's ugly, but it's doable. You just have to make sure that you always allow either the end of the string ($), any single character but the next, or the next character, as long as it itself isn't followed by (the rest of the string). Writing that for something long and complicated is a nightmare (unless someone has written a script to do it, which I don't know of).