Jump to content
Manimal

Expressões Regulares - RegEx - Parte 1

Recommended Posts

Olá Pessoal.


Vamos falar um pouco sobre Expressões Regulares?

Mais conhecido como RegEx, é forma de pesquisa, manipulação e substituição de strings.

E quando eu digo uma forma, pense mais como se fosse uma linguagem própria somente para isso.

Faz muito que tempo que programo e sempre utilizei strings e por tabela, manipulação das mesmas.

Principalmente em relação à pesquisa, ou seja, procurar um string dentro de outra, que é o caso mais comum.

Eu relutei muito até começar a utilizar o RegEx, até porque não entendia como funcionava, pois estava limitado ao meu conhecimento de usar sempre as funções "duras".


As funções "duras" de pesquisa e manipulacão de string são:

  • StringInStr

  • StringMid

  • StringLeft

  • StringRight

  • StringLen

e assim por diante. Basicamente todas as funções que começam com a palavra String ou _String.

Utilizando-as é possível fazer qualquer tipo de pesquisa ou modificação nas strings, porém são mais trabalhosas, precisam de um cuidado muito grande e eventualmente alguns cálculos e loops para fazer bem feito.


Os comandos RegEx são apenas 2 (dois):

  • StringRegExp

  • StringRegExpReplace

Sua sintaxe é bem simples, porém a montagem do parâmetro "pattern" é que é extremamente interessante (e complexa em alguns casos), mas fazem a mágica acontecer!

As expressões RegEx, ou "patterns", são a alma deste procedimento tornando estes comandos muito poderosos e é esse o foco deste pequeno tutorial.


Num exemplo simples, ao fazermos pesquisas dentro de uma string, fazemos de forma literal utilizando o comando StringInStr.

Considere o texto: "As memórias de um computador são divididas em memória volátil (RAM) e memória não volátil ou de armazenamento (hard disk)."

Para procurarmos a palavra "memória", utilizamos o comando StringInStr



StringInStr("As memórias de um computador são divididas em memória volátil (RAM) e memória não volátil ou de armazenamento (hard disk).", "memória")



E o retorno da função diz se localizou ou não a palavra procurada. Moleza!

Mas para verificar quantas palavras "memória" existem, já começa a complicar pois precisamos fazer um loop e mais coisas...


A grande vantagem das expressões RegEx é o fato de procurarmos "padrões" e não caracteres!

Ou seja, podemos procurar por definições genéricas do que precisamos e qualquer definição que sirva, tem o retorno.

Por exemplo, numa lista:


C:\Pasta1\Arquivo1.ext

C:\Pasta1\SubPasta1\Arquivo1.ext

blablabla

C:\Pasta1\SubPasta1\Arquivo2.ext

texto qualquer sem nexo nenhum

C:\Pasta2\SubPasta1\Arquivo3.ext

outro arquivo qualquer

C:\Pasta3\Arquivo34.ext

e assim por diante


Para identificarmos somente as linhas que são NOMES de arquivos usando o StringInStr fica bem mais complicado, mas usando RegEx fica assim:



If StringRegExp($Linha, "\\Arquivo\d\d?.ext") Then MsgBox(0, "Info", "Achou um nome de arquivo")



Observe que o que deve ser procurado não são apenas letras, mas também códigos como \d e ?.

Neste caso estou pedindo para a função procurar um string que começa com \Arquivo, seguida de UM ou DOIS dígitos e finalmente com a expressão .ext. Um padrão!


Outro grande exemplo de funções RegEx são para validação de campos de digitação.

Por exemplo, temos um campo que permite a digitação de um CEP. Sabemos que os CEPs brasileiros tem o formato 99.999-999.

Assim para fazer a validação de um campo CEP poderíamos usar o comando:



If StringRegExp($Campo_CEP, "\d\d\.\d\d\d-\d\d\d") Then MsgBox(0, "Info", "Campo informado corretamente")
; ou seria mais lógico se fosse assim
If not StringRegExp($Campo_CEP, "\d\d\.\d\d\d-\d\d\d") Then MsgBox(0, "Info", "CEP incorreto")


Ou para um campo de e-mail, a expressão poderia ser ".+@.+\.com\.br", obrigando informar um email com final .com.br. Apenas exemplo.


Acho que já dá para perceber o pder das expressões RegEx, não é?

Claro que é necessário que se conheça toda a sintaxe das expressões.

Não são muitas no começo e com pouco mais de meia dúzia de comandos, resolve-se 99% das pesquisas e trocas.

Mas se quiser se aprofundar, tem umas expressões muito complexas. Tem até IF interno!


Na segunda parte, vamos ver as expressões mais comuns!


  • Like 3

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×