Este tutorial demonstrará como usar o Regex no VBA.
O que é Regex?
Regex significa expressão regular. Uma expressão regular é um padrão composto de uma sequência de caracteres que você pode usar para encontrar um padrão correspondente em outra string. Para usar o Regex no VBA, você deve usar o objeto RegExp.
Um padrão como [A-C] pode ser usado para pesquisar e combinar uma letra maiúscula de A a C de uma sequência. Os padrões regex têm sua própria sintaxe e podem ser construídos usando um caractere ou uma sequência de caracteres.
Personagens Combinando
A tabela a seguir mostra a sintaxe que permitirá que você crie padrões Regex.
Sintaxe de padrão | Descrição | Exemplo | Jogos encontrados |
---|---|---|---|
. | Corresponde a qualquer caractere único, exceto vbNewLine | f.n | fan, fon, f @ n, fwn |
[personagens] | Corresponde a qualquer caractere único entre colchetes [] | [fn] | Só corresponderia a “f” ou “n” em leque |
[caracteres] | Corresponde a qualquer caractere único que não esteja entre colchetes [] | [fn] | Então, corresponderia a “j” em “fjn” |
[inicio fim] | Corresponde a qualquer caractere que faça parte do intervalo entre colchetes [] | [1-5] | Corresponderia a “4” e “5” em “45” |
\C | Corresponde a caracteres alfanuméricos e o sublinhado, mas não o caractere de espaço | \C | Corresponderia a “c” em “, c.” |
\C | Corresponde a qualquer caractere não alfanumérico e o sublinhado | \C | Corresponderia a “@” em “bb @ bb” |
\ s | Corresponde a qualquer caractere de espaço em branco, como espaços e tabulações | \ s | Corresponderia a ”” em “Isto é” |
\ S | Corresponde a qualquer caractere diferente de espaço em branco | \ S | Corresponderia a “T” e “h” em “T h” |
\ d | Corresponde a qualquer dígito decimal único | \ d | Corresponderia a “7” em “a7h” |
\ D | Corresponde a qualquer dígito não decimal único | \ D | Corresponderia a j em “47j” |
\ | Escapa caracteres especiais que permitem pesquisá-los | \. | Corresponderia a “.” em “59.pQ” |
\ t | Aba | \ t | Corresponderia a um caractere de tabulação |
\ r | Retorno de carruagem | \ r | Corresponderia a um retorno de carro (vbCr) |
\ n | vbNewLine (vbTab) | \ n | Corresponderia a uma nova linha |
Quantificadores
Você pode usar quantificadores para especificar quantas vezes deseja que o padrão corresponda à string.
Quantificador | Descrição | Exemplo | Jogos encontrados |
---|---|---|---|
* | Corresponde a zero ou mais ocorrências | fn * a | fna, fa, fnna, fnnna, fnfnnna |
+ | Corresponde a uma ou mais ocorrências | fn + a | fna, fnna, fnfnna |
? | Corresponde a zero ou um | fn? a | fa, fna |
{n} | Corresponde a “n” muitas vezes | d \ W {4} | Corresponderia a “d….” em “d…. & 5hi” |
{n,} | Corresponde pelo menos “n” número de vezes | d \ W {4,} | Corresponderia a “d…. &” Em “d…. & 5hi” |
{n, m} | Corresponde entre n e m número de vezes | d \ W {1,8} | Corresponderia a “d…. &&&&” em “d…. &&&& 5hi” |
Agrupamento
Agrupar ou capturar permite que você use um padrão para capturar e extrair uma parte de uma string. Portanto, não apenas o padrão é correspondido, mas a parte da string que corresponde ao padrão é capturada.
Padrão | Descrição | Exemplo | Jogos encontrados e capturados |
---|---|---|---|
(expressão) | Agrupa e captura o padrão entre parênteses | (\ W {4}) | Agruparia e capturaria “@@@@” de “1 @@@@ 1jlmba” |
Como usar Regex no VBA
Para usar o Regex no VBA, primeiro você deve definir a referência no editor do VBE. No editor VBE, vá para Ferramentas> Referências> Expressões regulares do Microsoft VBScript.
Estas são as propriedades do objeto RegExp:
- Padrão - O padrão que você usará para combinar com a string.
- Ignorar caso - Se for True, a correspondência ignora maiúsculas e minúsculas.
- Global - Se for verdadeiro, todas as correspondências do padrão na string serão encontradas. Se for False, apenas a primeira correspondência será encontrada.
- MultiLine - Se verdadeiro, a correspondência de padrões ocorre entre as quebras de linha.
Estes são os métodos do objeto RegExp:
- Teste - Procura um padrão em uma string e retorna True se uma correspondência for encontrada.
- Substituir - Substitui as ocorrências do padrão pela string de substituição.
- Executar - Retorna correspondências do padrão em relação à string.
Testando um padrão para uma correspondência com uma string
Você pode usar o método Test para verificar se um padrão corresponde a uma sequência na string de entrada. O resultado é True se uma correspondência for encontrada. O código a seguir mostrará como testar um padrão em uma string:
12345678910111213 | Sub RegexTestingAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)End Sub |
O resultado é:
Substituindo um padrão em uma string
Você pode usar o método Replace para substituir a primeira instância de um padrão correspondente em uma string ou todas as instâncias de um padrão correspondente em uma string. Se Global for definido como False, apenas a primeira instância será substituída. O código a seguir mostrará como substituir um padrão em uma string:
1234567891011 | Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "Este é o número"regexOne.Global = FalsestringOne = "Este é o número 718901"Debug.Print regexOne.Replace (stringOne, "Esse é o novo número")End Sub |
O resultado é:
Para substituir apenas a parte do número da string usada acima, você usaria o seguinte código:
1234567891011 | Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "[\ D] +"regexOne.Global = FalsestringOne = "Este é o número 718901"Debug.Print regexOne.Replace (stringOne, "777192")End Sub |
O resultado é:
Para substituir cada instância de um certo padrão em uma string, você deve definir o valor global como True. O código a seguir mostra como substituir cada instância de -A1289C- na string:
1234567891011 | Sub RegexReplacingEveryInstanceOfAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "\ W \ A \ d + C \ W"regexOne.Global = TruestringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")End Sub |
Correspondência e exibição de um padrão em uma string
Você pode usar o método Execute para corresponder a uma ou todas as instâncias de um padrão em uma string. O código a seguir mostra como combinar e exibir todas as instâncias do padrão da string:
123456789101112131415161718 | Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "A.C"regexOne.Global = TrueregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Defina theMatches = regexOne.Execute (stringOne)Para cada partida nas correspondênciasDebug.Print Match.ValuePróximoEnd Sub |
O resultado é:
Digamos que só quiséssemos corresponder -ADC- da string acima. O código a seguir mostra como corresponder e exibir apenas -ADC- da string:
123456789101112131415161718 | Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "\ - \ A.C \ -"regexOne.Global = FalseregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Defina theMatches = regexOne.Execute (stringOne)Para cada partida nas correspondênciasDebug.Print Match.ValuePróximoEnd Sub |
Regex pode levar algum tempo para aprender, mas é uma ferramenta extremamente poderosa para identificar / manipular strings de texto. Ele também é amplamente usado em linguagens de programação.