Fordi regex er grådig som standard. dvs. udtrykkene .* eller .+ prøv at tage så mange karakterer som muligt. Derfor <.+> vil strække sig fra den første < til den sidste > . Gør det doven ved at bruge lazy-operatoren ? :
regexp_replace(teststring, '<.+?>')
eller
regexp_replace(teststring, '<.*?>')
Nu skal du søge efter > stopper ved den første > stødt på.
Bemærk, at . inkluderer > også, derfor den grådige variant (uden ? ) sluger al > men den sidste.