Regular Expression nongreedy is greedy

non-greedy, regex, regex-greedy

Solution

A regular expression can only match a fragment of text that actually exists.

Because the substring 'ton' doesn't exist anywhere in your string, it can't be the result of a match. A match will only return a substring of the original string

EDIT: To be clear, if you were using the string below, with an extra 'n'

toooooooonoooooon

this regular expression (which doesn't specify 'o's)

t.*n

would match the following (as many characters as possible before an 'n')

toooooooonoooooon

but the regular expression

t.*?n

would only match the following (as few characters as possible before an 'n')

toooooooon

Problem

I have the following text ``` tooooooooooooon ``` According to this book I'm reading, when the `?` follows after any quantifier, it becomes non greedy. My regex `to*?n` is still returning `tooooooooooooon`. It should return `ton` shouldn't it? Any idea why?

Original source