Quero remover todos os caracteres que não são sublinhados, hífens ou alfanuméricos. Além disso, não quero sublinhado ou hífen como o primeiro caractere, então isso também precisa ser removido.
Isso parece funcionar principalmente usando REGEXP_REPLACE e LTRIM:
SELECT LTRIM(
REGEXP_REPLACE(
'_-Hello(-)World)',
'[^-^_^a-z^A-Z^0-9]*',
''),
'_-') AS "result"
FROM dual;
Isso retorna corretamente:
result
--------------------
Hello-World
No entanto, por algum motivo, isso não funciona quando há uma quebra de linha na string de origem:
SELECT LTRIM(
REGEXP_REPLACE(
'_-Hello(-
)World)',
'[^-^_^a-z^A-Z^0-9]*',
''),
'_-') AS "result"
FROM dual;
Isso retorna "HelloWorld", ou seja, sem o hífen:
result
--------------------
HelloWorld
Também pode haver outros problemas com esta solução que esqueci de mencionar. Então, existe uma maneira melhor de fazer o que estou tentando fazer?