VBA - regulárne výrazy

VBA - regulárne výrazy

Tento tutoriál si kladie za cieľ vysvetliť všetky zložitosti týkajúce sa používania regulárnych výrazov. Naučíte sa, ako prechádzať reťazcami, aby ste našli podreťazce pomocou regulárnych výrazov (bežne nazývaných RegExp ).

predpoklady

V editore VBA.
  • Prejdite do ponuky Nástroje> Odkazy.
  • Prejdite si rôzne odkazy a skontrolujte nasledujúce možnosti "Microsoft VBScript Regular Expression 5.5".

Syntax a deklarácia

V týchto príkladoch budeme vyžadovať iba tieto výrazy:

Výkaz

K dispozícii sú dve možnosti:

Ako objekt

 Dim reg ako objekt Nastaviť reg = CreateObject ("vbscript.regexp") 

VBScript_RegExp_55.regexp

 Dim reg ako VBScript_RegExp_55.regexp Nastaviť reg = nový VBScript_RegExp_55.regexp 

Vlastnosti

Bez ohľadu na to, ako ste uviedli RegExp, vlastnosti budú mať rovnakú syntax.

Vzor

Vzor musí byť v súlade s podreťazcom. To vám umožní prechádzať reťazec.

 reg.Pattern = "IciLeMotif" 

skúška

Skúšame reťazec, ak sa nájde vzor, ​​vráti túto booleovskú hodnotu: True.

 reg.Test = "IciLeMotif" 

Reťazec začína písmenom A (veľké písmená)

Vzor by bol:
  • na začiatku reťazca
  • existuje A

Zápis tohto vzoru je: ^ A

 Funkcia Prem_Lettre_A (výraz As String) Ako boolean Dim reg ako objekt Nastaviť reg = CreateObject ("vbscript.regexp") 'Le Pattern est le motif que l'on recherche' début de chaîne: ^ 'doit être: reg.Pattern = "^ A" '' '' '; 

Vyvolanie funkcie:

 Sub Test_A () 'Nous allons chercher si un String začne par "A" Majuscule MsgBox Prem_Lettre_A ("alors?") MsgBox Prem_Lettre_A ("Ahhh") MsgBox Prem_Lettre_A ("Pas mal non?") End Sub 

Reťazec začína písmenom a alebo A

Označenie vzoru je [aA]

 Sub Test_a_ou_A () 'Nous allons chercher si un String začne par "a" ou "A" MsgBox Prem_Lettre_a_ou_A ("alors?") MsgBox Prem_Lettre_a_ou_A ("Ahhh") MsgBox Prem_Lettre_a_ou_A ("Pas mal non?") Koniec Sub Funkcia Prem_Lettre_a_ou_A ( výraz As String) Ako boolean Dim reg ako objekt 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 (výraz) End Function 

Reťazec začína veľkým písmenom

Notácia pre tento vzor je: [AZ]

 MsgBox "alors" začne par une majuscule: "& Prem_Lettre_Majuscule (" alors? ") MsgBox" Ahhh začať par une majuscule: "& Prem_Lettre_Majuscule (" Ahhh ") MsgBox" Pas mal non? Začať par une majuscule: " & Prem_Lettre_Majuscule ("Pas mal non?") Koniec Sub Funkcia Prem_Lettre_Majuscule (výraz As String) Ako boolean Dim reg ako objekt Nastaviť reg = CreateObject ("vbscript.regexp") 'ici la première lettre: ^' doit être une lettre Majuscule: [AZ] reg.Pattern = "^ [AZ]" Prem_Lettre_Majuscule = reg.test (výraz) End Function 

Reťazec končí

Použite nasledujúci zápis: $

 Sub Fini_Par () MsgBox "La fráza: Les RegExp c'est super! Sa termine par super:" & Fin_De_Phrase ("Les RegExp c'est super!") MsgBox "La fráza: C'est super les RegExp! super: "& Fin_De_Phrase (" C'est super les RegExp! ") End Sub Funkcia Fin_De_Phrase (výraz As String) Ako 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! $"' poznámka le $ se miesto à la fin ... Fin_De_Phrase = reg.test (výraz) End Function 

Reťazec obsahuje číslo

Zápis pre tento vzor je [0-9] . Ak chcete nájsť číslo medzi 3 a 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") Koniec Sub Funkcia A_Un_Chiffre (výraz As String) Ako boolean Dim reg ako objekt Set reg = CreateObject ("vbscript.regexp") 'doit comporter un chiffre de 0 à 9 n'importe ou (dab, milieu, fin de chaine ...) reg.Pattern = "[0-9]"' remarque [0 -9] s'écrit également: d 'reg.Pattern = "d" A_Un_Chiffre = reg.test (výraz) End Function 

Reťazec obsahuje trojmiestne číslo

Teraz budeme "kvantifikovať" v našom RegExp. Ak chcete nájsť tri výskyty, použijeme zložené zátvorky {}.

 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") Koniec Sub Funkcia Nb_A_Trois_Chiffre (výraz As String) Ako boolean Dim reg Ako objekt Nastaviť reg = CreateObject ("vbscript.regexp") 'doit comporter 3 z 0 do 9 que se suivent' le nombre d'occurrence se note {} reg.Pattern = "d {3}" 'équivalant de: reg.Pattern = "[0-9] {3}" Nb_A_Trois_Chiffre = reg.test (výraz) End Function 

Reťazec obsahuje 3 samostatné čísla

Kód

 Sub Contents_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 Funkcia Trois_Chiffre (výraz As String) Ako boolean Dim reg ako objekt Nastaviť reg = CreateObject (" vbscript.regexp ") 'doit comporter 3 z 0 na 9 {} 'bod (.) indique n'importe quel caractère sauf le saut de ligne' le + indique que le qué 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 (výraz) End Function 

Variant

 Sub Contents_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 Funkcia Trois_Chiffre_Simplifiee (výraz As String) Ako boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") 'Motív motívu: (.) ​​+ (D {1}) sa répète trois fois: reg.Pattern = "(. + d {1}) {3}" Trois_Chiffre_Simplifiee = reg.test (výraz) End Function 

Príklad použitia

V našom príklade je cieľom určiť, či sa reťazec skladá z nasledujúcej postupnosti:
  • 1: Reťazec začína slovom "Vis"
  • 2: nasleduje medzera
  • 3: za ktorým nasleduje 1 až 3 písmená
  • 4: nasleduje medzera
  • 5: za ktorým nasleduje písmeno M
  • 6: za ktorým nasleduje 1 až 2 písmená
  • 7: nasleduje pomlčka
  • 8: nasledované 1 až 3 písmenami
  • 9: za ktorým nasleduje slovo „classe“ obklopené medzerami A malými písmenami
  • 10: pokračovanie 1-2 listov
  • 11: nasleduje bodka
  • 12: nasleduje písmeno

Všimnite si, že : Každý blok vzoru je uzavretý medzi zátvorkami.

značenia:

  • 1- => (^ Vis)
  • 2- => ()
  • 3- => ([a-zA-Z] {1, 3})
  • 4- => () --- Poznámka: 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- => (trieda)
  • 10- => ([a-zA-Z] {1, 2})
  • 11- => (\ t
  • 12- => ([a-zA-Z] {1})

To nám dáva nasledujúci vzor

"(Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2}) (-) ([a-zA-Z ] {1, 3}) (klasifikácia) ([a-zA-Z] {1, 2}) (.) ([A-zA-Z] {1}) "

Kód:

 Sub Main () Ak VerifieMaChaine ("Vis xx Mxx-x classe xx.x") Potom MsgBox "dobré" Else MsgBox "pas glop" Koniec Ak 'manque l'espace avant le M: ​​Ak VerifieMaChaine ("Vis xxMxx-x classe xx.x ") Potom MsgBox" dobré "Else MsgBox" pas glop "Koniec Ak Koniec Sub Funkcia VerifieMaChaine (výraz As String) Ako boolean Dim reg ako objekt Nastaviť reg = CreateObject (" vbscript.regexp ") 'Tam sú jednoduchšie príklad, ale toto je najkomplexnejšie reg.Pattern = "(^ Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2} ) (-) ([a-zA-Z] {1, 3}) (klasifikácia) ([a-zA-Z] {1, 2}) (.) ([a-zA-Z] {1}) "VerifieMaChaine = reg.test (expression) Koniec funkcie End Sub 

Stiahnuť ▼

Kódy popísané v tomto návode sú uvedené v tomto zošite: //cjoint.com/14au/DHgoqY7wwIw.htm
Predchádzajúci Článok Nasledujúci Článok

Najlepšie Tipy