Porque regex é ganancioso por padrão. Ou seja as expressões
.*
ou .+
tente pegar o máximo de caracteres possível. Portanto <.+>
abrangerá desde o primeiro <
até o último >
. Torne-o preguiçoso usando o operador preguiçoso ?
:regexp_replace(teststring, '<.+?>')
ou
regexp_replace(teststring, '<.*?>')
Agora, a busca por
>
irá parar no primeiro >
encontrado. Observe que
.
inclui >
também, portanto, a variante gananciosa (sem ?
) engole todo o >
mas o último.