Expressões Regulares no Microsoft Access
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Saber utilizar Expressões Regulares no Access, geralmente nos livra de ter que criar códigos mirabolantes e com isso nos poupa um enorme tempo de programação. As Expressões Regulares são utilizadas, basicamente, para se obter determinada sequência de caracteres dentro de um texto ou para validar uma entrada de informação.
Por exemplo, vamos supor que precisemos extrair os números contidos na seguinte frase:
"O Brasil perdeu de 7 x 1 para a Alemanha em 2014"
Pense aí qual seria a programação utilizada por você, para extrair esses números (7, 1 e 2014) . Com a função oferecida aqui no artigo, resolvemos a questão com pouquíssimas linhas. Veja!
Dim strTexto$
Dim varResultado as Variant
strTexto = "O Brasil perdeu de 7 x 1 para a Alemanha em 2014"
varResultado = fncER(strTexto,"\d+",false)
A função fncER() irá retornar os números, separados por uma barra vertical 7|1|2014
Observe que \d+ é a nossa expressão. Expressão é um conjunto de caracteres sequenciados que determina a regra a ser aplicada na busca. A interpretação de \d+ é: - buscar números de qualquer tamanho na string.
Agora, vamos supor que precisemos validar um campo de entrada de senha. A senha deve ter, obrigatoriamente, o comprimento de 6 caracteres e pelo menos um número. Observe com atenção, a expressão em vermelho, aplicada na função:
Private Sub txtSenha_BeforeUpdate(Cancel As Integer) If fncER(me!txtSenha,"^(?=.*\d).{6}$", true) = false then MsgBox "A senha não atende as regras...", vbInformation, "Aviso" cancel = true End If
End Sub
Interpretação da expressão utilizada, para atender as regras propostas:
^ | Início da cadeia |
(?=.*\d) | Ao menos um número na cadeia |
.{6} | Cadeia com 6 caracteres obrigatórios |
$ | Fim da cadeia |
Se a senha digitada pelo usuário não contiver os 6 caracteres e ao menos um número, a função fncER() retornará o valor FALSE, impedindo assim, o prosseguimento no cadastro.
Quer aprender tudo sobre Expressões Regulares ?
Há um excelente livro disponível em Português, basta acessar gratuitamente o link abaixo:
http://aurelio.net/regex/guia/
Neste outro link, o autor do livro, oferece dois vídeos interessantes:
Aonde posso testar as Expressões Regulares ?
Existem vários sites disponíveis para esta finalidade. Seguem dois deles:
Há algum lugar com exemplos ?
Sim, você irá encontrar centenas de expressões exemplos, no seguinte site:
Nossa função
Copie e cole a função abaixo para um módulo global do seu projeto. Atente para os comentários
Faça o login aqui para ter acesso ao código.
Mais alguns exemplos de como podemos usar nossa função:
1) - O exemplo abaixo obtém os dados da seguinte XML:
<nome>Avelino</nome><telefone>8277-1528</telefone><cep>20570110</cep>
Veja que em poucas linhas conseguimos extrair as informações desejadas:
Dim strXml as string
Dim varResultado
strXml="<nome>Avelino</nome><telefone>8277-1528</telefone><cep>20570110</cep>"
resultado = fncER(strXml,">([^>|<].*?)<",False)
resultado = fncER(resultado,"[^<|>]+",False)
MsgBox Resultado, vbInformation, "Aviso"
Note que a fncER() foi utilizada por duas vezes. Na primeira vez, a expressão utilizada na função não conseguiu extrair os dados de forma limpa, trazendo as partes indesejáveis em vermelho:
>Avelino<|>8277-1528<|>20570110<
Na segunda aplicação da função, a expressão utilizada retirou a parte indesejável, retornando apenas com os dados.
Avelino|8277-1528|20570110
Desafio: Tente extrair os dados, criando apenas uma expressão e caso tenha êxito, informe aqui nos comentários deste artigo.
2) - O código abaixo, verifica se o usuário digitou um e-mail válido.
Dim strExpressão$ strExpressão = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$" If fncER(me!Email, strExpressão, true) = False then MsgBox "O e-mail não foi digitado corretamente...", vbInformation, "Aviso" Cancel = true end If
Interpretação da expressão utilizada, para atender as regras propostas:
^ | Início da cadeia |
([a-zA-Z0-9_\-\.]+) | Permite nomes utilizando letras maiúsculas, minúsculas, o underline, o traço e o ponto. O uso do + significa que temos que ter ao menos um caractere neste conjunto. Ex: a@... |
@ | Arroba obrigatório |
[a-z0-9-]+ | Permite as letras minúsculas, os números e os traços, junto ao arroba. O uso do + significa que temos que ter ao menos um caractere neste conjunto. Ex: a@b... |
(\.[a-z0-9-]+)* | Permite um ponto seguido de letras minúsculas, de números e de traços. O asterisco indica que podemos não ter esta parte. Ex: a@b.com ou a@b |
(\.[a-z]{2,3}) | Permite um ponto seguido de 2 ou 3 letras minúsculas. Ex. a@b.com.br ou a@b.com |
$ | Final da cadeia |
Resuminho dos Metacaracteres utilizados nas Expressões Regulares:
Metacaractere | Nome | Função |
. | Ponto | Um caractere qualquer |
[...] | Lista | Lista de caracteres permitidos |
[^...] | Lista negada | Lista de caracteres proibidos |
? | Opcional | Zero ou um |
* | Asterisco | Zero, um ou mais |
+ | Mais | Um ou mais |
{n,m} | Chaves | De n a m |
^ | Circunflexo | Início da linha |
$ | Cifrão | Fim da linha |
\b | Borda | Início ou fim da palavra |
\ | Escape | \c - Torna literal o caractere c |
| | Ou | Ou um ou outro |
(...) | Grupo | Delimita um grupo |
\1 ... \9 | Retrovisor | Texto casado nos grupos 1...9 |
\d | Dígito | |
\D | Não-dígito | |
\w | Palavra | |
\W | Não palavra | |
\s | Brancos | |
\S | Não brancos | |
(?#texto) | Texto é um comentário | |
(?:ER) | Grupo fantasma, retrovisor não conta | |
(?=ER) | Casa se ER casar adiante | |
(?<=ER) | Casa se ER casar antes | |
(?!ER) | Casa se ER não casar adiante | |
(?<!ER) | Casa se ER não casar antes |
Baixe o arquivo e faça o teste:
Clique aqui e baixe o arquivo exemplo.
Abra a consulta qryTeste e veja que os campos Data Inscrição e Inscrição são dados extraídos do campo Descrição.
Abra a estrutura da consulta e veja a função fncER() sendo aplicada para extrair os dados. Analise as expressões utilizadas.
Agora, abra o formulário frmTeste.
- Simule e-mails escritos de forma equivocada e veja o resultado.
- Entre com uma senha sem respeitar as regras estabelecidas e veja o resultado.
Desafio: Tente criar códigos para validar os dois campos do formulário, sem usar as Expressões Regulares. Conclua se é vantagem ou desvantagem saber utilizar as Expressões Regulares no Access.
Sucesso!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Vídeo - Criando Ribbons parte 1 - Conhecendo a estrutura Xml
13 comentários Avelino Sampaio 08/12/2022 06:21:39 Fabio, creio que fique mais acertado se retirar os números. Como esta fazendo corre o risco de não retornar com os acentos. SoTexto: fncER([descrição];"[^0-9/]+";Falso) Ainda assim irá retornar com dois |. use então o replace SoTexto: Substituir(fncER([descrição];"[^0-9/]+";Falso);"|";"") Sucesso! Anisio Estevao 06/12/2022 17:23:30 Amigo, Boa tarde! Tentei executar os comando conforme o tutorial, mas apareceu uma mensagem de erro Você poderia disponibilizar o arquivo ? Meu e-mail é anisioestevao@terra.com.br Fabio Paes 05/12/2022 13:20:27 Excelente material meu amigo. Uma Duvida: Na tentativa de extrair somente o Texto ( SoTexto: fncER([descrição];"[aA-zZ+\s]";Falso) ) Ele retorna o Resultado assim: ( R|e|g|i|s|t|r|a|d|o| |e|m| | |c|o|m| |o| |n|m|e|r|o| ) Qual a forma correta de extrair somente o Texto? pois dessa forma ele traz vários | , sei que com REPLACE() resolveria... Mas tem uma forma mais correta pra extrair somente o Texto? Tiago Nascimento 29/10/2022 00:22:09 Excelente postagem sobre Expressões Regulares, pois o professor na faculdade, deu essa aula apenas como uma leitura, sem mostrar como está no post ai. Não tinha o conhecimento que era assim que se programava para se obter o resultado das expressões regulares. Marcio Melo - RJ 18/10/2022 13:53:55 Super dica! Muita vantagem utilizar dessas expressões para validar ou extrair parte de um texto para exibir ou alimentar uma determinada coluna... Sou mais Brasil! Forte abraço! Henrique Rodrigues 18/10/2022 10:22:27 Obrigado pelas DICAS!!! Abcs!! Carvalho 17/10/2022 23:36:08 Você sempre surpreendendo não é Avelino, parabéns pelo ótimo post. Cleber Ribeiro 17/10/2022 13:52:35 Meus parabéns, Já estou esperando o que vem mais por aí!! Muito bom!! silvio 17/10/2022 06:41:01 Oxi que maneiro.. Parabéns Evanildo Conceição 16/10/2022 22:08:46 Avelino, sempre nos surpreendendo. Meus parabéns! Antonio Carlos 16/10/2022 20:45:00 Mestre Avelino Mais um GOOLLL de placa. Até aonde podemos ir com esse Access, hem ?! MARCIO MELO -RJ 13/09/2022 07:05:05 Muito Showww! Utilizar de expressão regular para analisar um email, nem se compara com o código em VBA para fazer o mesmo teste. Legal que pode fazer vários testes dentro da mesma ideia, pois, a extrutura de usar o VbSript já está montada. Conhecimento é tudo, parabéns e obrigado por levar mais esse artigo de forma super didática como sempre... Forte abraço! Sou mais Brasil! Eduardo 25/01/2021 04:58:52 Muito bom mesmo, não conhecia tudo, agora ficou fácil... Parabéns! |