What is the question mark inside this regex doing?

I thought the ? matches zero or one occurrence of a pattern. However in
this example:

def show_regexp(string, pattern)
match = pattern.match(string)
if match
“#{match.pre_match}->#{match[0]}<-#{match.post_match}”
else
“no match”
end
end

a = “The moon is made of cheese”
show_regexp(a, /\s.*?\s/) #=> The-> moon <-is made of cheese

What exactly is the ? doing?

‘John M.’ via Ruby on Rails: Talk wrote in post #1155178:

I thought the ? matches zero or one occurrence of a pattern. However in
this example:

def show_regexp(string, pattern)
match = pattern.match(string)
if match
“#{match.pre_match}->#{match[0]}<-#{match.post_match}”
else
“no match”
end
end

a = “The moon is made of cheese”
show_regexp(a, /\s.*?\s/) #=> The-> moon <-is made of cheese

What exactly is the ? doing?

*? – 0 or more, lazy. Matches will be as small as possible.

/\s.*\s/.match(searchText) (not lazy)

/\s.*?\s/.match(searchText) (lazy)

/\s.*\s/ (not lazy)
The-> moon is made of <-cheese (1 match)

/\s.*?\s/ (lazy)
=> The-> moon <-is-> made <-of cheese (2 matches)