Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como extrair o grupo da expressão regular no Oracle?


O terceiro parâmetro da função REGEXP_SUBSTR indica a posição na string alvo (de_desc no seu exemplo) onde você deseja começar a pesquisar. Supondo que uma correspondência seja encontrada na parte especificada da string, isso não afeta o que é retornado.

No Oracle 11g, há um sexto parâmetro para a função, que acho que é o que você está tentando usar, que indica o grupo de captura que você deseja que seja retornado. Um exemplo de uso adequado seria:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;

Onde o último parâmetro 1 indique o número do grupo de captura que você deseja retornar. Aqui está um link para a documentação que descreve o parâmetro.

10g parece não ter essa opção, mas no seu caso você pode conseguir o mesmo resultado com:
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);

já que você sabe que uma correspondência terá exatamente um caractere em excesso no início e no final. (Como alternativa, você pode usar RTRIM e LTRIM para remover colchetes de ambas as extremidades do resultado.)