
O que são Expressões Regulares?
No Oracle, expressões regulares são sequências de caracteres que formam um padrão de busca. Elas são amplamente utilizadas para buscar, substituir e validar dados em strings. As expressões regulares fornecem uma maneira poderosa e flexível de manipular texto, permitindo que você encontre padrões complexos em grandes volumes de dados.
Vantagens de Usar Expressões Regulares
- Flexibilidade na Busca: Permitem encontrar padrões complexos dentro de strings, como números, palavras específicas, formatos de data, etc.
- Manipulação de Strings: Facilitam a substituição, extração e validação de substrings dentro de uma string maior.
- Validação de Dados: São muito úteis para garantir que os dados inseridos sigam um formato específico, como endereços de e-mail ou números de telefone.
- Eficiência nas Consultas: Melhoram a eficiência das consultas ao permitir buscas complexas sem a necessidade de escrever lógica adicional em PL/SQL.
Tipos de Funções de Expressões Regulares
REGEXP_LIKE
A função REGEXP_LIKE
compara uma string a um padrão de expressão regular e retorna verdadeiro se houver uma correspondência. Veja um exemplo:
SELECT nome FROM funcionarios WHERE REGEXP_LIKE(nome, '^A');
Neste exemplo, a consulta retorna todos os nomes que começam com a letra ‘A’.
NOME |
---|
Ana Souza |
REGEXP_INSTR
A função REGEXP_INSTR
retorna a posição do primeiro caractere da substring que corresponde ao padrão de expressão regular dentro de uma string. Veja um exemplo:
SELECT nome, REGEXP_INSTR(nome, 'a') AS primeiro_a FROM funcionarios;
Neste exemplo, a consulta retorna a posição do primeiro ‘a’ em cada nome.
NOME | PRIMEIRO_A |
---|---|
Carlos Silva | 2 |
Ana Souza | 3 |
Mariana Costa | 2 |
Roberto Alves | 0 |
Fernanda Santos | 5 |
Lucas Oliveira | 4 |
Camila Pereira | 2 |
Ramon Vieira | 2 |
REGEXP_SUBSTR
A função REGEXP_SUBSTR
retorna a substring que corresponde ao padrão de expressão regular dentro de uma string. Veja um exemplo:
SELECT nome, REGEXP_SUBSTR(nome, '[A-Za-z]+') AS primeiro_nome FROM funcionarios;
Neste exemplo, a consulta retorna a primeira palavra em cada nome.
NOME | PRIMEIRO_NOME |
---|---|
Carlos Silva | Carlos |
Ana Souza | Ana |
Mariana Costa | Mariana |
Roberto Alves | Roberto |
Fernanda Santos | Fernanda |
Lucas Oliveira | Lucas |
Camila Pereira | Camila |
Ramon Vieira | Ramon |
REGEXP_REPLACE
A função REGEXP_REPLACE
substitui todas as ocorrências de uma substring que corresponde ao padrão de expressão regular dentro de uma string por outra substring. Veja um exemplo:
SELECT REGEXP_REPLACE(nome, 'a', 'A') FROM funcionarios;
Neste exemplo, todos os ‘a’ em cada nome são substituídos por ‘A’.
NOME | NOME_APOS_REPLACE |
---|---|
Carlos Silva | CArlos SilvA |
Ana Souza | AnA SouzA |
Mariana Costa | MAriAnA CostA |
Roberto Alves | Roberto Alves |
Fernanda Santos | FernAndA SAntos |
Lucas Oliveira | LucAs OliveirA |
Camila Pereira | CAmilA PereirA |
Ramon Vieira | RAmon VieirA |
Padrões Comuns
- Metacaracteres:
.
: Corresponde a qualquer caractere único.*
: Corresponde a zero ou mais ocorrências do caractere anterior.+
: Corresponde a uma ou mais ocorrências do caractere anterior.?
: Corresponde a zero ou uma ocorrência do caractere anterior.^
: Corresponde ao início da string.$
: Corresponde ao final da string.|
: Alternativa lógica (OR).[]
: Define uma classe de caracteres.()
: Define um grupo de captura.
- Quantificadores:
{n}
: Exatamente n ocorrências.{n,}
: No mínimo n ocorrências.{n,m}
: Entre n e m ocorrências.
- Classes de caracteres predefinidas:
\d
: Dígito.\D
: Não dígito.\w
: Caractere de palavra.\W
: Não caractere de palavra.\s
: Espaço em branco.\S
: Não espaço em branco.
Exemplos Práticos
Buscar por strings que começam com ‘R’
SELECT nome FROM funcionarios WHERE REGEXP_LIKE(nome, '^R');
NOME |
---|
Roberto Alves |
Ramon Vieira |
Buscar por strings que terminam com ‘s’
SELECT nome FROM funcionarios WHERE REGEXP_LIKE(nome, 's$');
NOME |
---|
Roberto Alves |
Fernanda Santos |
Buscar por strings que contêm números
SELECT nome FROM funcionarios WHERE REGEXP_LIKE(nome, '\d');
Substituir todos os espaços por hífens
SELECT nome, REGEXP_REPLACE(nome, '\s', '-') AS nome_com_hifem FROM funcionarios;
NOME | NOME_COM_HIFEM |
---|---|
Carlos Silva | Carlos-Silva |
Ana Souza | Ana-Souza |
Mariana Costa | Mariana-Costa |
Roberto Alves | Roberto-Alves |
Fernanda Santos | Fernanda-Santos |
Lucas Oliveira | Lucas-Oliveira |
Camila Pereira | Camila-Pereira |
Ramon Vieira | Ramon-Vieira |
Extrair o primeiro número de uma string
SELECT REGEXP_SUBSTR(nome, '\d+') FROM funcionarios;
Considerações Finais
As expressões regulares são ferramentas poderosas para manipulação e filtragem de dados no Oracle. Utilizando-as corretamente, você pode criar consultas mais flexíveis e eficientes, garantindo a precisão dos resultados e facilitando a análise de dados.
Se você tiver alguma dúvida ou sugestão, deixe um comentário abaixo!