What is the difference between:
(.+?)
and
(.*?)
when I use it in my php preg_match
regex?
They are called quantifiers.
*
0 or more of the preceding expression
+
1 or more of the preceding expression
Per default a quantifier is greedy, that means it matches as many characters as possible.
The ?
after a quantifier changes the behaviour to make this quantifier "ungreedy", means it will match as little as possible.
Example greedy/ungreedy
For example on the string "abab"
a.*b
will match "abab" (preg_match_all will return one match, the "abab")
while a.*?b
will match only the starting "ab" (preg_match_all will return two matches, "ab")
You can test your regexes online e.g. on Regexr, see the greedy example here
"lazy" is the more common term for "ungreedy"
The example is incorrect. Both
(.+?)
and(.*?)
behave differently in a various position of regular expressions which area(.+?)
,(.+?)b
,a(.+?)b
,a(.*?)
,(.*?)b
,a(.*?)b
.