> Yes, there are. For example: you want to match any occurence of "bar" except
> if it is preceeded by "foo". I.e. you'd want to match "blabar" or "oofbar",
> but not "foobar".
I think it's important to state that the look-behind matches with zero
width, i.e. the match isn't included in the match.
If it's okay to include the prefix in the match (e.g., in a gsub, the
prefix could then be referenced as a group), this could also be
achieved without lookbehind:
require 'strscan'
# 0 1 2 3
# 0123456789012345678901234567890123
s = StringScanner.new('blabar oofbar foobar ofobar offbar')
# ^ ^ ^ ^
until s.eos?
m = s.scan_until(/([^o]|[^o]o|[^f]oo)(bar)/)
p s.pos
end
# =>
6
13
27
34
pos 20 is missing.
There are of course situations when this isn't possible.
Regards,
Thomas.