in reply to Regular expression seems to be greedy

Though the match between < and > is non-greedy, perl's regular expressions start matching from the left. This means that the left-most < char is found first, then the .*? part matches until the first (and only) >

It is not 100% clear what you want to match in general, but for this string

s/<[^<>]*>//;
gives the desired result.

the perlre manpage has more info about greedyness vs left-first matching. See section "Version 8 Regular Expressions", paragraph 7, or the section on backtracking (search for got <d is under the bar in the >)