VBA - regularni izrazi

VBA - regularni izrazi

Namen te vadnice je pojasniti vse zapletenosti, povezane z uporabo regularnih izrazov. Naučili se boste, kako se premikati po nizih za iskanje podnizov z uporabo regularnih izrazov (običajno imenovani RegExp ).

Predpogoji

V urejevalniku VBA.
  • Pojdite v meni Orodja> Sklici.
  • Prebrskajte različne reference in preverite naslednjo možnost "Microsoft VBScript Regular Expression 5.5".

Sintaksa in deklaracija

V teh primerih so edini pogoji, ki jih bomo zahtevali, naslednji:

Izjava

Na voljo sta dve možnosti:

Kot predmet

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

VBScript_RegExp_55.regexp

 Dim reg As VBScript_RegExp_55.regexp Nastavi reg = Novo VBScript_RegExp_55.regexp 

Lastnosti

Ne glede na to, kako ste navedli RegExp, bodo lastnosti imele isto sintakso.

Vzorec

Vzorec mora ustrezati podnizu. Omogoča vam krmarjenje po nizu.

 reg.Pattern = "IciLeMotif" 

Test

Testirali bomo niz, če je vzorec najden, vrne naslednjo logično vrednost: True.

 reg.Test = "IciLeMotif" 

Niz se začne z A (z velikimi črkami)

Vzorec bi bil:
  • na začetku niza
  • obstaja A

Oznaka tega vzorca je: ^ A

 Funkcija Prem_Lettre_A (izraz As String) Kot Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'Le Vzorec je le motiv za iskanje podatkov': To je v redu: Reg.Pattern = "^ A" 'preizkusi ponovno nastavitev Boolean (parfait pour notre fonction Booléenne !!!) Prem_Lettre_A = reg.test (izraz) End Function 

Če želite poklicati funkcijo:

 Sub Test_A () 'Vsi nasveti, ki se začnejo z nizom, se začnejo z "A" Majuscule MsgBox Prem_Lettre_A ("alors?") MsgBox Prem_Lettre_A ("Ahhh") MsgBox Prem_Lettre_A ("Pas mal non?") End Sub 

Niz se začne z a ali A

Oznaka vzorca je [aA]

 Sub Test_a_ou_A () 'Nous allons chercher si un String začetek par "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 Pod funkcijo Prem_Lettre_a_ou_A ( Izraz As String) Kot Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'ici la premiere lettre: ^' doit être: a ou A => [aA] reg.Pattern = "^ [aA]" Prem_Lettre_a_ou_A = reg.test (izraz) Končaj funkcijo 

Niz se začne z veliko črko

Oznaka za ta vzorec je: [AZ]

 Sub Commence_par_Majuscule () MsgBox "alors? Commence par une majuscule:" & Prem_Lettre_Majuscule ("alors?") MsgBox "Ahhh commence par une majuscule:" & Prem_Lettre_Majuscule ("Ahhh") MsgBox & Prem_Lettre_Majuscule ("Pas mal non?") Končna podmena Prem_Lettre_Majuscule (izraz kot niz) Kot Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'ici la premiere lettre: ^ [AZ] reg.Pattern = "^ [AZ]" Prem_Lettre_Majuscule = reg.test (izraz) Končaj funkcijo 

Niz se konča s

Uporabite naslednje oznake: $

 Sub Fini_Par () MsgBox "Izraz: Les RegExp c'est super! Se termine par super:" & Fin_De_Phrase ("Les RegExp c'est super!") MsgBox "La fraza: C'est super les RegExp! super: "& Fin_De_Phrase (" C'est super les RegExp! ") Konec Sub Funkcija Fin_De_Phrase (izraz kot niz) Kot 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! $"' opomba le $ s mesto na koncu ... Fin_De_Phrase = reg.test (izraz) End Function 

Niz vsebuje številko

Oznaka za ta vzorec je [0-9] . Če želite najti številko med 3 in 7: [3-7]

 Podstrani Contient_un_chiffre () MsgBox "aze1rty contient un chiffre:" & A_Un_Chiffre ("aze1rty") MsgBox "azerty contient un chiffre:" & A_Un_Chiffre ("azerty") Končna pod-funkcija A_Un_Chiffre (izraz kot niz) Kot logični dim reg. reg = CreateObject ("vbscript.regexp") 'ne preveri, ali je šel od 0 do 9 (ne uporabljajte, ne uporabljajte, ne spreminjajte ...) reg.Pattern = "[0-9]" "remarque [0 D 'reg.Pattern = "d" A_Un_Chiffre = reg.test (izraz) Končna funkcija 

Niz vsebuje 3-mestno številko

Zdaj bomo "kvantificirali" v naši RegExp. Če želite poiskati tri pojavitve, bomo uporabili zavite oklepaje {}.

 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") End Sub Funkcija Nb_A_Trois_Chiffre (izraz As String) Kot Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'doit comporter 3 chiffres de 0 à 9 qui se suivent' le nombre d'occurrence se note {} reg.Pattern d {3} "'ekquivalant de: reg.Pattern =" [0-9] {3} "Nb_A_Trois_Chiffre = reg.test (izraz) Končaj funkcijo 

Niz vsebuje 3 ločene številke

Koda

 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:" ") Končna podfunkcija Trois_Chiffre (izraz As String) Kot Boolean dim reg As Object Set reg = CreateObject (" vbscript.regexp ") 'doit comporter 3 chiffres de 0 à 9 qui ne suivent pas' le nombre d'occurrence se note {} '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 ou une infinité de fois reg.Pattern = "(.) + (d {1}) (.) + (d {1}) (.) + (d {1}) "Trois_Chiffre = reg.test (izraz) Končaj funkcijo 

Različica

 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 Končna podfunkcija Trois_Chiffre_Simplifiee (izraz As String) Kot Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'Comme le même motiv: (.) ​​+ (({1}) se répète trois fois: reg.Pattern = "(. + d {1}) {3}" Trois_Chiffre_Simplifiee = reg.test (izraz) Končaj funkcijo 

Primer uporabe

V našem primeru je cilj ugotoviti, ali je niz sestavljen iz naslednjega zaporedja:
  • 1: Niz se začne z besedo "Vis"
  • 2: sledi presledek
  • 3: sledijo 1 do 3 črke
  • 4: sledi presledek
  • 5: sledi črka M
  • 6: sledi 1 do 2 črka
  • 7: sledi vezaj
  • 8: sledi 1 do 3 črke
  • 9: sledi beseda "classe", obdana s presledki IN v malih črkah
  • 10: spremljanje 1-2 črk
  • 11: sledi pika
  • 12: sledi pismo

Upoštevajte : Vsak blok vzorca je zaprt v oklepajih.

Zapis:

  • 1- => (^ Vis)
  • 2- => ()
  • 3- => ([a-zA-Z] {1, 3})
  • 4- => () --- Opomba: na aurait pu l'insérer avec le M qui suit ... 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})

To nam daje naslednji vzorec

"(^ 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}) "

Koda:

 Sub Main () Če VerifieMaChaine ("Vis xx Mxx-x classe xx.x") Potem MsgBox "dobro" Else MsgBox "pas glop" End Če "manque l'espace avant le M: ​​Če VerifieMaChaine (" Vis xxMxx-x classe xx.x ") Potem MsgBox" dobro "Else MsgBox" pas glop "Konec Če se konča Pod funkcionalnost VerifieMaChaine (izraz kot niz) Kot Boolean Dim reg kot objekt Set reg = CreateObject (" vbscript.regexp ") 'Obstaja enostavnejši primer, toda ta je najbolj popolna 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 (izraz) Končaj Sub Sub End 

Prenesi

Kode, opisane v tem vodiču, so navedene v tem delovnem zvezku: //cjoint.com/14au/DHgoqY7wwIw.htm
Prejšnji Članek Naslednji Članek

Top Nasveti