Porque regex es codicioso por defecto. Es decir. las expresiones .*
o .+
trate de tomar tantos caracteres como sea posible. Por lo tanto <.+>
abarcará desde el primer <
hasta el último >
. Hazlo perezoso usando el operador perezoso ?
:
regexp_replace(teststring, '<.+?>')
o
regexp_replace(teststring, '<.*?>')
Ahora, la búsqueda de >
se detendrá en el primer >
encontrado.
Tenga en cuenta que .
incluye >
también, por lo tanto, la variante codiciosa (sin ?
) se traga todo el >
pero el último.