VBA - Espressioni regolari

VBA - Espressioni regolari

Questo tutorial mira a spiegare tutte le complessità relative all'uso delle espressioni regolari. Imparerai come navigare attraverso le stringhe per trovare sottostringhe usando le espressioni regolari (comunemente chiamate RegExp ).

Prerequisiti

Nell'editor VBA.
  • Vai al menu Strumenti> Riferimenti.
  • Sfoglia i vari riferimenti e controlla la seguente opzione "Microsoft VBScript Regular Expression 5.5".

Sintassi e dichiarazione

In questi esempi, gli unici termini che dovremo richiedere sono:

La dichiarazione

Sono disponibili due opzioni:

Come oggetto

 Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 

VBScript_RegExp_55.regexp

 Dim reg As VBScript_RegExp_55.regexp Set reg = New VBScript_RegExp_55.regexp 

Le proprietà

Indipendentemente da come hai dichiarato RegExp, le proprietà avranno la stessa sintassi.

Il modello

Il modello deve essere conforme alla sottostringa. Ti permette di navigare attraverso la stringa.

 reg.Pattern = "IciLeMotif" 

Test

Verificheremo la stringa, se il modello è stato trovato, restituisce il seguente valore booleano: Vero.

 reg.Test = "IciLeMotif" 

La stringa inizia con A (maiuscolo)

Il modello sarebbe:
  • all'inizio della stringa
  • c'è un A

La notazione di questo modello è: ^ A

 Funzione Prem_Lettre_A (espressione As String) As Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'Le Pattern est le motif que l'on recherche' début de chaîne: ^ 'doit être: A reg.Pattern = "^ A" 'le test renvoie un Boolean (parfait pour notre fonction Booléenne !!!) Prem_Lettre_A = reg.test (espressione) End Function 

Per chiamare la funzione:

 Sub Test_A () 'Nous allons chercher si un String inizio da "A" Majuscule MsgBox Prem_Lettre_A ("alors?") MsgBox Prem_Lettre_A ("Ahhh") MsgBox Prem_Lettre_A ("Pas mal non?") End Sub 

La stringa inizia con a o A

La notazione del modello è [aA]

 Sub Test_a_ou_A () 'Nous allons chercher si un String inizio da "a" o "A" MsgBox Prem_Lettre_a_ou_A ("alors?") MsgBox Prem_Lettre_a_ou_A ("Ahhh") MsgBox Prem_Lettre_a_ou_A ("Pas mal non?") End Sub Function Prem_Lettre_a_ou_A ( espressione As String) As Boolean Reg reg As Object Set reg = CreateObject ("vbscript.regexp") 'ici la première lettre: ^' doit être: a ou A => [aA] reg.Pattern = "^ [aA]" Prem_Lettre_a_ou_A = reg.test (espressione) End Function 

La stringa inizia con una lettera maiuscola

La notazione per questo modello è: [AZ]

 Sub Commence_par_Majuscule () MsgBox "alors? Comence par une majuscule:" & Prem_Lettre_Majuscule ("alors?") MsgBox "Ahhh inizio une majuscule:" & Prem_Lettre_Majuscule ("Ahhh") MsgBox "Pas mal non? Comence par une majuscule:" & Prem_Lettre_Majuscule ("Pas mal non?") End Sub Function Prem_Lettre_Majuscule (espressione As String) As Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'ici la première lettre: ^' doit être une lettre Majuscule: [AZ] reg.Pattern = "^ [AZ]" Prem_Lettre_Majuscule = reg.test (espressione) End Function 

La stringa finisce con

Usa la seguente notazione: $

 Sub Fini_Par () MsgBox "La frase: Les RegExp c'est super! Se termine par super:" & Fin_De_Phrase ("Les RegExp c'est super!") MsgBox "La frase: C'est super les RegExp! Se termine par super: "& Fin_De_Phrase (" C'est super les RegExp! ") End Sub Function Fin_De_Phrase (espressione As String) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") 'La fin de la chaine doit être : super! 'notation de fin de chaîne: $ reg.Pattern = "super! $"' note le $ se posto alla fine ... Fin_De_Phrase = reg.test (espressione) End Function 

La stringa contiene un numero

La notazione per questo modello è [0-9] . Se si desidera trovare un numero compreso tra 3 e 7: [3-7]

 Sub Contient_un_chiffre () MsgBox "aze1rty contient un chiffre:" & A_Un_Chiffre ("aze1rty") MsgBox "azerty contient un chiffre:" & A_Un_Chiffre ("azerty") End Sub Function A_Un_Chiffre (espressione As String) As Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") "doit comporter un chiffre de 0 à 9 n'importe ou (debutto, milieu, fin de chaine ...) reg.Pattern =" [0-9] "'remarque [0 -9] s'écrit également: \ d 'reg.Pattern = "\ d" A_Un_Chiffre = reg.test (espressione) End Function 

La stringa contiene un numero a 3 cifre

Ora "quantificeremo" nel nostro RegExp. Per trovare tre occorrenze, utilizzeremo le parentesi graffe {}.

 Sub Contient_Un_Nombre_A_trois_Chiffres () MsgBox "aze1rty contient 3 chiffres:" & Nb_A_Trois_Chiffre ("aze1rty") MsgBox "a1ze2rty3 contient 3 chiffres:" & Nb_A_Trois_Chiffre ("a1ze2rty3") MsgBox "azer123ty contient 3 chiffres:" & Nb_A_Trois_Chiffre ("azer123ty") Fine Sub Function Nb_A_Trois_Chiffre (espressione As String) As Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'doit comporter 3 chiffres de 0 à 9 qui se suivent' il nombre d'occorrenza se nota {} reg.Pattern = "\ d {3}" 'équivalant de: reg.Pattern = "[0-9] {3}" Nb_A_Trois_Chiffre = reg.test (espressione) End Function 

La stringa contiene 3 numeri separati

Il codice

 Sub Contient_trois_Chiffres () MsgBox "aze1rty contient 3 chiffres séparés:" & Trois_Chiffre ("aze1rty") MsgBox "a1ze2rty3 contient 3 chiffres séparés:" & Trois_Chiffre ("a1ze2rty3") MsgBox "azer123ty contient 3 chiffres séparés:" & Trois_Chiffre ("azer123ty ") End Sub Function Trois_Chiffre (espressione As String) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") 'doit comporter 3 chiffres de 0 à 9 qui ne se suivent pas' il nombre d'occorrenza se nota {} 'le point (.) indique n'importe quel caractère sauf le saut de ligne' le + indique que ce qui le précède (ici le point) doit être représenté une o une infinité de fois reg.Pattern = "(.) + (\ d {1}) (.) + (\ d {1}) (.) + (\ d {1}) "Trois_Chiffre = reg.test (espressione) Fine Funzione 

Una variante

 Sub Contient_trois_Chiffres_Variante () MsgBox "aze1rty contient 3 chiffres séparés:" & Trois_Chiffre_Simplifiee ("aze1rty") MsgBox "a1ze2rty3 contient 3 chiffres séparés:" & Trois_Chiffre_Simplifiee ("a1ze2rty3") MsgBox "azer123ty contient 3 chiffres séparés:" & Trois_Chiffre_Simplifiee ("azer123ty ") End Sub Function Trois_Chiffre_Simplifiee (espressione As String) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") 'Comme le même motivo: (.) ​​+ (\ D {1}) se répète trois fois: reg.Pattern = "(. + \ d {1}) {3}" Trois_Chiffre_Simplifiee = reg.test (espressione) End Function 

Esempio di utilizzo

Nel nostro esempio, l'obiettivo è determinare se la stringa è composta dalla seguente sequenza:
  • 1: la stringa inizia con la parola "Vis"
  • 2: seguito da uno spazio
  • 3: seguito da 1 a 3 lettere
  • 4: seguito da uno spazio
  • 5: seguito dalla lettera M
  • 6: seguito da 1 a 2 lettere
  • 7: seguito da un trattino
  • 8: seguito da 1 a 3 lettere
  • 9: seguito dalla parola "classe" circondata da spazi AND in lettere minuscole
  • 10: follow-up di 1-2 lettere
  • 11: seguito da un punto
  • 12: seguito da una lettera

Nota : ogni blocco del modello è racchiuso tra parentesi.

Notazione:

  • 1- => (^ Vis)
  • 2- => ()
  • 3- => ([a-zA-Z] {1, 3})
  • 4- => () --- Nota: su aurait l'insérer avec le M qui vestito ... Mis pour l'exemple
  • 5- => (M)
  • 6- => ([a-zA-Z] {1, 2})
  • 7- => (-)
  • 8- => ([a-zA-Z] {1, 3})
  • 9- => (classe)
  • 10- => ([a-zA-Z] {1, 2})
  • 11- => (\.)
  • 12- => ([a-zA-Z] {1})

Questo ci dà il seguente schema

"(^ Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2}) (-) ([a-zA-Z ] {1, 3}) (classe) ([a-zA-Z] {1, 2}) (.) ([A-zA-Z] {1}) "

Il codice:

 Sub Main () Se VerifieMaChaine ("Vis xx Mxx-x classe xx.x") Allora MsgBox "buono" Else MsgBox "pas glop" End If "manque l'espace avant le M: ​​Se VerifieMaChaine (" Vis xxMxx-x classe xx.x ") Quindi MsgBox" buono "Else MsgBox" pas glop "End If End Sub Function VerifieMaChaine (espressione As String) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") 'Ci sono esempi più semplici, ma questo è il più completo reg.Pattern = "(^ Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2} ) (-) ([a-zA-Z] {1, 3}) (classe) ([a-zA-Z] {1, 2}) (.) ([a-zA-Z] {1}) "VerifieMaChaine = reg.test (espressione) End Function End Sub 

Scaricare

I codici descritti in questo tutorial sono tutti elencati in questa cartella di lavoro: //cjoint.com/14au/DHgoqY7wwIw.htm
Articolo Precedente Articolo Successivo

I Migliori Consigli