On Wed, Nov 12, 2008 at 4:52 PM, Dave Roberts <dave.a.roberts / gmail.com> wrote:
> Hello!  I have a string: "Hello - 1 - World"
>
> irb(main):017:0> a = "Hello - 1 - World"
> => "Hello - 1 - World"
>
> I want to chop off the "Hello - " part.  Hello could be any word, so I
> want to match it generically.
> To match the first minus I do this:
>
> irb(main):018:0> b = a.sub(/\s-\s/, "")
> => "Hello1 - World"
>
> Good!  Now to get rid of the first word I try this:
>
> irb(main):019:0> c = a.sub(/.*\s-\s/, "")
> => "World"
>
> Bad!  It matched to the second minus!  Why does sub do this?  I thought
> it was supposed to match the first occurrence only.

Because * by default is greedy, so it tries to match as much as it can.
Try this:

irb(main):002:0> c = a.sub(/.*?\s-\s/, "")
=> "1 - World"

Jesus.