String#scan puzzlement

I’m trying to match sequences of capitalised words - can someone
explain why the second regexp works but not the first?

irb(main):001:0> a = “And then we Went to The Next Place to be”
=> “And then we Went to The Next Place to be”
irb(main):002:0> a.scan /([A-Z]\w+\s+)+/
=> [["And "], ["Went "], ["Place "]]
irb(main):003:0> a.scan /(?:[A-Z]\w+\s+)+/
=> ["And ", "Went ", "The Next Place "]

martin

Martin DeMello wrote:

I’m trying to match sequences of capitalised words - can someone
explain why the second regexp works but not the first?

irb(main):001:0> a = “And then we Went to The Next Place to be”
=> “And then we Went to The Next Place to be”
irb(main):002:0> a.scan /([A-Z]\w+\s+)+/
=> [["And "], ["Went "], ["Place "]]
irb(main):003:0> a.scan /(?:[A-Z]\w+\s+)+/
=> ["And ", "Went ", "The Next Place "]

Because when you group, scan returns arrays with [$1, $2, $3…], etc.,
but in “to The Next Place to be” =~ /([A-Z]\w+\s+)+/ there is only $1.
Put the last “+” inside a group.

On 7/12/06, Carlos [email protected] wrote:

Because when you group, scan returns arrays with [$1, $2, $3…], etc.,
but in “to The Next Place to be” =~ /([A-Z]\w+\s+)+/ there is only $1.
Put the last “+” inside a group.

ah! that makes things a lot clearer, thanks.

martin

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs