Take this pattern:
/@[b\](.*)\[/b\]@/
Now, take a look at this string:
[noparse][B]This[/b] word is bold, but what exactly is [b]bold[/b]?[/noparse]
Since * is a "greedy" quantifier by default, it will try to consume as much text that matches "." (so any character) as possible. Thus, it starts before the word "The" and consumes everything up until the last ending bold tag after "bold". Why didn't it stop at the first [noparse][/b][/noparse] tag? Because it found one farther down the line, and as we've said, it's a "greedy" lil' quantifier! :p
Adding a '?' right after a or + will effectively negate the greediness of the quantifiers. Note that you can also add the 'U' modifier at the end of your pattern; this 'U' stands for Ungreedy, meaning that all 's and +'s will be non-greedy by default (so a '?' after one would then make it greedy again).