Is this expected behaviour? I haven't seen anything related to this mentioned in the API docs... irb(main):057:0> s = 'a::b:::c::::d' => "a::b:::c::::d" irb(main):058:0> s.split(/:/) => ["a", "", "b", "", "", "c", "", "", "", "d"] => OK irb(main):059:0> s.split(/:+/) => ["a", "b", "c", "d"] => OK irb(main):060:0> s.split(/(:)+/) => ["a", ":", "b", ":", "c", ":", "d"] => ? irb(main):061:0> s.split(/((:)+)/) => ["a", "::", ":", "b", ":::", ":", "c", "::::", ":", "d"] => ??? irb(main):062:0> s.split(/(:+)/) => ["a", "::", "b", ":::", "c", "::::", "d"] => ??? mortee