That is because regular expressions are inherently greedy 🙂 Regexps will try to find the largest match possible...this means your code will find "<A>entire string<A>$" and then move in towards the middle until the largest match possible is found.
Try this:
$re = "<A>[[:alnum:] ]*<A>";
This makes the regexp find "<A>" at the beginning of the line, followed by any alphanumeric text (and spaces) that may exist, up until another "<A>" is encountered.
Hope this helps!
-Rich