The U tells your regular expression to be "Ungreedy". Greedy means to try to match as much as possible whereas "ungreedy" only takes the smallest match.
So in the greedy example your match is:
<b>example:</b><strong>this is a test</strong>
I assume the html tags "</b><strong>"
are stripped away either when you output it or by the preg_match already.
In contrast the ungreedy does what you want by matching like this:
<b>example:</b>, <strong>this is a test</strong>
EDIT:
To achieve a similar match using the ? you can do:
preg_match_all("|<[^>/]+>.*?</[^>]+>|",
"<b>example:</b><strong>this is a test</strong>",
$out, PREG_PATTERN_ORDER);
print_r($out);
This is because .*?
will try to limit the content in between the tag to be as short as possible (ungreedy), therefore again resulting in two matches.