Rexular expression quantifiers

hi there

just a quick question

what is the difference between greedy and non greedy quantifiers?

cheers

···

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

The greediness.

Seriously: why don't you just try it out in IRB?

s=("a"*10 + "b")
s+=s
s.scan /\w+b/
s.scan /\w+?b/

Cheers

robert

···

2008/1/7, Johnathan Smith <stu_09@hotmail.com>:

just a quick question

what is the difference between greedy and non greedy quantifiers?

--
use.inject do |as, often| as.you_can - without end

what is the difference between greedy and non greedy quantifiers?

I agree the best way to find out is to audition it in IRB, but just
for completeness, the difference is that a greedy quantifier will grab
the largest possible match, and the non-greedy quantifier will grab
the smallest possible match.

e.g.:

/<.+>/.match("<b>stuff</b>")[0]

=> "<b>stuff</b>"

/<.+?>/.match("<b>stuff</b>")[0]

=> "<b>"

The only difference is +?, the non-greedy quantifier; using it, you
get the first possible match, instead of the biggest. QED.

···

--
Giles Bowkett

Podcast: http://hollywoodgrit.blogspot.com
Blog: http://gilesbowkett.blogspot.com
Portfolio: http://www.gilesgoatboy.org
Tumblelog: http://giles.tumblr.com

Robert Klemme pisze:

···

2008/1/7, Johnathan Smith <stu_09@hotmail.com>:

just a quick question

what is the difference between greedy and non greedy quantifiers?

The greediness.

Seriously: why don't you just try it out in IRB?

s=("a"*10 + "b")
s+=s
s.scan /\w+b/
s.scan /\w+?b/

There's also possessive one (doesn't backtrack)
ruby 1.9 or jruby 1.1 (trunk)

irb(main):011:0> "aa" =~ /a++a/
=> nil

lopex

You can get Ruby 1.8 to not backtrack as well:

$ ruby -ve 'p "aa" =~ /(?>a+)a/'
ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-darwin9.1.0]
nil

James Edward Gray II

···

On Jan 7, 2008, at 11:49 AM, Marcin Mielżyński wrote:

Robert Klemme pisze:

2008/1/7, Johnathan Smith <stu_09@hotmail.com>:

just a quick question

what is the difference between greedy and non greedy quantifiers?

The greediness.
Seriously: why don't you just try it out in IRB?
s=("a"*10 + "b")
s+=s
s.scan /\w+b/
s.scan /\w+?b/

There's also possessive one (doesn't backtrack)
ruby 1.9 or jruby 1.1 (trunk)

irb(main):011:0> "aa" =~ /a++a/
=> nil