Sure thing.
Basically, PHP's quantifiers (such as * and +) are greedy, by default. This means that they will match as much as possible. Take this example:
[email]you@your.com[/email] and [email]them@their.com[/email]
your first regex statment would match like this:
[email][color=red]you@your.com[/email] and [email]them@their.com[/color][/email]
Resulting in:
<a href="mailto:you@your.com[/email] and [email]them@their.com">you@your.com[/email] and [email]them@their.com</a>
However, if we set the matching to lazy (using ?) it will break at the first occurence of [/email], rather than that last, and will result in two matches:
[email][color=red]you@your.com[/color][/email] and [email][color=red]them@their.com[/color][/email]
Resulting in:
<a href="mailto:you@your.com">you@your.com</a> and <a href="mailto:them@their.com">them@their.com</a>
Hope that helps... 🙂