Rexular expression quantifiers

hi there

just a quick question

what is the difference between greedy and non greedy quantifiers?

cheers

2008/1/7, Johnathan S. [email protected]:

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/

Cheers

robert

Robert K. pisze:

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

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

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

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 G. II

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(“stuff”)[0]
=> “stuff
/<.+?>/.match(“stuff”)[0]
=> “

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


Giles B.

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