[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

String#split(/\s+/) vs. String#split(/(\s+)/

Sam Kong

8/12/2006 12:54:00 AM

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?

Thanks,
Sam

--
Posted via http://www.ruby-....

5 Answers

dblack

8/12/2006 1:03:00 AM

0

Ken Allen

8/12/2006 1:53:00 AM

0

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.rubypoweran... => Ruby/Rails training & consultancy
> ----> SEE SPECIAL DEAL FOR RUBY/RAILS USERS GROUPS! <-----
> http://dablog.r... => D[avid ]A[. ]B[lack's][ Web]log
> http://www.manning... => book, Ruby for Rails
> http://www.rubyc... => Ruby Central, Inc.


e

8/12/2006 4:29:00 AM

0

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"]

# Try this one
p s.split /((((\s+))))/

>
> Could anybody explain it, please?
>
> Thanks,
> Sam


--
Posted via http://www.ruby-....

Jano Svitok

8/12/2006 7:30:00 PM

0

On 8/12/06, Eero Saynatkari <eero.saynatkari@kolumbus.fi> wrote:
> 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"]
>
> # Try this one
> p s.split /((((\s+))))/
>
> >
> > Could anybody explain it, please?
> >
> > Thanks,
> > Sam

Seems like all groups in the separator regex are output to the result array.

I wonder where is it documented, except for the source itself?
(string.c, rb_str_split_m())

Rick DeNatale

8/12/2006 8:00:00 PM

0

On 8/12/06, Jan Svitok <jan.svitok@gmail.com> wrote:
> On 8/12/06, Eero Saynatkari <eero.saynatkari@kolumbus.fi> wrote:
> > 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"]
> >
> > # Try this one
> > p s.split /((((\s+))))/
> >
> > >
> > > Could anybody explain it, please?
> > >
> > > Thanks,
> > > Sam
>
> Seems like all groups in the separator regex are output to the result array.
>
> I wonder where is it documented, except for the source itself?
> (string.c, rb_str_split_m())

Well the pickaxe (2nd ed.) says so:

"If pattern is a Regexp, str is divided where the pattern matches.
Whenever the pattern matches a zero-length string, str is split into
individual characters. If pattern includes groups, these groups will
be included in the returned values."

Ruby-doc.org doesn't have that last sentence, in either the 1.8 nor
the 1.9 documentation.

--
Rick DeNatale
http://talklikeaduck.den...