Yes.  scan() cares about the order and takes the first match (not the most agressive match):

sc = StringScanner.new("<=")
bad = sc.scan(/(==|!=|=~|<|<=|>|>=)/)
print "bad is #{bad}\n"

sc = StringScanner.new("<=")
good = sc.scan(/(==|!=|=~|<=|>=|<|>)/)
print "good is #{good}\n"

bad is <
good is <=