Question
The regex /abc$/
will match an abc
that does appear at the end of the
line. How do I do the inverse?
I want to match abc
that isn't at the end of a line.
Furthermore, I'm going to be using the regex to replace strings, so I want to
capture only abc
, not anything after the string, so /abc.+$/
doesn't work,
because it would replace not only abc
but anything after abc
too.
What is the correct regex to use?
Answer
/abc(?!$)/
(?!$)
is a [negative lookahead](http://www.regular-
expressions.info/lookaround.html). It will look for any match of abc that is
not directly followed by a $
(end of line)
Tested against
- abc ddee (match)
- dddeee abc (no match)
- adfassdf abc s (match)
- f abc ddee (match)
applying it to your case:
ruby-1.9.2-p290 :007 > "aslkdjfabcalskdfjaabcaabc".gsub(/abc(?!$)/, 'xyz')
=> "aslkdjfxyzalskdfjaxyzaabc"