1. Introdução

No artigo anterior, uma expressão regular que consegue remover comandos RTF de uma string foi apresentada e comentada. Esta expressão é reproduzida abaixo.

Listagem 1: Expressão Regular para Remoção de RTF

\{?\\[[:alnum:]]+\s?([[:alnum:]]*;)?\}?

Conforme foi comentado no mesmo artigo, é muito comum encontrar sistemas que gravam informações em campos CLOB ou VARCHAR2 contendo codificação RTF. Alguns exemplos: a descrição de um atendimento de help desk, o currículo de um funcionário, etc. O problema é que em muitas situações práticas, pode ser necessário remover os comandos RTF do campo, para obter o “texto puro” (ex: para montar um relatório). Como fazer isso?

2. Expressões Regulares no Oracle

Felizmente, quase todos os SGBD’s atuais oferecem suporte para expressões regulares. Normalmente, a expressão pode ser inserida na própria cláusula SQL. No Oracle, por exemplo, é possível utilizar a função REGEXP_REPLACE para substituir uma substring que “case” com uma expressão regular por algum outro valor especificado.

Suponha, por exemplo, uma tabela de funcionários que contenha um campo chamado CURRICULO, onde está armazenado o currículo de um funcionário na codificação RTF. Podemos usar a função REGEXP_REPLACE em um SQL para aplicar a expressão regular que remove os comandos RTF:

Listagem 2: SELECT que recupera o ID dos funcionários e o CURRÍCULO com comandos RTF removidos

SELECT 
id, 
REGEXP_REPLACE(curriculo,'\{?\\[[:alnum:]]+\s?([[:alnum:]]*;)?\}*','')  AS curriculo_sem_rtf
FROM funcionario

3. A questão dos caracteres acentuados

Por fim, é importante observar que, muitas vezes, o RTF emprega codificações especiais para representar os caracteres acentuados. Exemplo: ''e3 é o código para ã (letra “a” com til). Uma idéia para tratar o problema é utilizar o convencional comando REPLACE do Oracle em conjunto com a expressão regular para substituir todos os acentos. Ex: REPLACE(curriculo, chr(39)||'e3', 'ã') .

Com esta observação, finalizamos o artigo.