Why does using the parentheses cause the separator string/character to be placed into the resulting array? -ken On 11-Aug-06, at 9:03 PM, dblack / wobblini.net wrote: > Hi -- > > On Sat, 12 Aug 2006, Sam Kong wrote: > >> Hello Rubyists, >> >> I'm reading Ruby Cookbook. >> The first chapter is about String. >> One of the examples shows the differenct between String#split(/\s >> +/) and >> String#split(/(\s+)/) without much explanation. >> I understand what sub-grouping is in regex. >> Bug I don't understand what role that plays in String#split. >> >> s = "one two three" >> >> p s.split(/\s+/) #=> ["one", "two", "three"] >> p s.split(/(\s+)/) #=> ["one", " ", "two", " ", "three"] >> >> >> Could anybody explain it, please? > > When you use (), you get the delimiter (the thing you're splitting on) > back in the array, along with the items between the delimiters. An > example without spaces might make it clearer: > > "aaaXXXbbbXXXccc".split(/XXX/) => ["aaa","bbb","ccc"] > "aaaXXXbbbXXXccc".split(/(XXX)/) => ["aaa","XXX","bbb","XXX","ccc"] > > In your example, the delimiter is \s+ which is of variable length; > that's why you get both " " and " " in the final array. > > > David > > -- > http://www.rubypowerandlight.com => Ruby/Rails training & consultancy > ----> SEE SPECIAL DEAL FOR RUBY/RAILS USERS GROUPS! <----- > http://dablog.rubypal.com => D[avid ]A[. ]B[lack's][ Web]log > http://www.manning.com/black => book, Ruby for Rails > http://www.rubycentral.org => Ruby Central, Inc.