Omdat regex standaard hebzuchtig is. D.w.z. de uitdrukkingen .* of .+ probeer zoveel mogelijk karakters te nemen. Daarom <.+> zal overspannen vanaf de eerste < tot de laatste > . Maak het lui met de luie operator ? :
regexp_replace(teststring, '<.+?>')
of
regexp_replace(teststring, '<.*?>')
Nu de zoektocht naar > stopt bij de eerste > tegengekomen.
Merk op dat . bevat > ook, dus de hebzuchtige variant (zonder ? ) slikt alle > in maar de laatste.