VBA - regulární výrazy

VBA - regulární výrazy

Cílem tohoto kurzu je vysvětlit všechny složitosti týkající se používání regulárních výrazů. Naučíte se procházet řetězci, abyste našli podřetěže pomocí regulárních výrazů (běžně nazývaných RegExp ).

Předpoklady

V editoru VBA.
  • Přejděte do nabídky Nástroje> Odkazy.
  • Projděte si různé odkazy a zkontrolujte následující možnost "Microsoft VBScript Regular Expression 5.5".

Syntaxe a deklarace

V těchto příkladech budeme jedinou podmínkou:

Prohlášení

K dispozici jsou dvě možnosti:

Jako objekt

 Dim reg jako objekt Nastavit reg = CreateObject ("vbscript.regexp") 

VBScript_RegExp_55.regexp

 Dim reg jako VBScript_RegExp_55.regexp Nastavit reg = Nový VBScript_RegExp_55.regexp 

Vlastnosti

Bez ohledu na to, jak jste uvedli RegExp, budou mít vlastnosti stejnou syntaxi.

Vzor

Vzor musí odpovídat dílčímu řetězci. Umožňuje procházet řetězcem.

 reg.Pattern = "IciLeMotif" 

Test

Řetězec otestujeme, pokud je nalezen, vrátí následující booleovskou hodnotu: True.

 reg.Test = "IciLeMotif" 

Řetězec začíná písmenem A (velká písmena)

Vzor by byl:
  • na začátku řetězce
  • existuje A

Zápis tohoto vzoru je: ^ A

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

Volání funkce:

 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 

Řetězec začíná znakem a nebo A

Zápis vzoru je [aA]

 Sub Test_a_ou_A () 'Nous allons chercher si un String zahájí 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?") Konec Sub Funkce Prem_Lettre_a_ou_A (" výraz As String) Jako Boolean Dim reg jako objekt Nastavit 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 

Řetězec začíná velkým písmenem

Zápis pro tento vzor je: [AZ]

 MsgBox "alors? Zahájit par une majuscule:" & Prem_Lettre_Majuscule ("alors?") MsgBox "Ahhh začíná par une majuscule:" & Prem_Lettre_Majuscule ("Ahhh") MsgBox "Pas mal non? Spustit par une majuscule:" & Prem_Lettre_Majuscule ("Pas mal non?") End Sub Funkce Prem_Lettre_Majuscule (výraz As String) Jako logický Dim reg jako objekt Nastavit 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 

Řetězec končí

Použijte následující zápis: $

 Sub Fini_Par () MsgBox "La fráze: Les RegExp c'est super! Se termine par super:" & Fin_De_Phrase ("Les RegExp c'est super!") MsgBox "La fráze: C'est super les RegExp! Se termine par super: "& Fin_De_Phrase (" C'est super les RegExp! ") End Sub Funkce Fin_De_Phrase (výraz As String) Jako logický Dim reg jako objekt Nastavit 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 místo à la fin ... Fin_De_Phrase = reg.test (výraz) End Function 

Řetězec obsahuje číslo

Zápis pro tento vzor je [0-9] . Pokud chcete najít číslo mezi 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") Konec Sub Funkce A_Un_Chiffre (výraz jako řetězec) Jako logický Dim reg jako objekt Set reg = CreateObject ("vbscript.regexp") 'doit comporter un chiffre de 0 à 9 n'importe ou (début, 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 

Řetězec obsahuje 3místné číslo

Nyní budeme "kvantifikovat" v našem RegExpu. Pro nalezení tří výskytů použijeme složené závorky {}.

 Sub Contents_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") Konec Funkce Sub Nb_A_Trois_Chiffre (výraz As String) Jako logický Dim reg jako objekt Nastavit reg = CreateObject ("vbscript.regexp") 'doit comporter 3 čísla z 0 do 9 ukázat jako' 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 

Řetězec 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 Funkce Funkce Trois_Chiffre (výraz As String) Jako logický Dim reg jako objekt Nastavit reg = CreateObject (" vbscript.regexp ") 'doit comporter 3 z 0 na 9 {} 'le point (.) indique n'importe quel caractère sauf le saut de ligne' le + indique que le qué le précède (ici le bod) 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 

Varianta

 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 Funkce Trois_Chiffre_Simplifiee (výraz As String) Jako logický Dim reg jako objekt Nastavit reg = CreateObject (" vbscript.regexp ") 'Comme le même motiv: (.) ​​+ (D {1}) se répète trois fois: reg.Pattern = "(. + d {1}) {3}" Trois_Chiffre_Simplifiee = reg.test (výraz) End Function 

Příklad použití

V našem příkladu je cílem zjistit, zda je řetězec tvořen následujícím sledem:
  • 1: Řetězec začíná slovem "Vis"
  • 2: následovaný mezerou
  • 3: následuje 1 až 3 písmena
  • 4: následovaný mezerou
  • 5: následuje písmeno M
  • 6: následuje 1 až 2 písmena
  • 7: následovaný pomlčkou
  • 8: následuje 1 až 3 písmena
  • 9: za ním následuje slovo „classe“ obklopené mezerami A malými písmeny
  • 10: pokračování 1-2 dopisů
  • 11: následovaná tečkou
  • 12: následovaný dopisem

Všimněte si, že : Každý blok vzoru je uzavřen mezi závorkami.

Notace:

  • 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- => (classe)
  • 10- = ([a-zA-Z] {1, 2})
  • 11- => (\ t
  • 12- => ([a-zA-Z] {1})

To nám dává následující vzor

"(Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2}) (-) ([a-zA-Z ] {1, 3}) (třída) ([a-zA-Z] {1, 2}) (.) ([A-zA-Z] {1}) "

Kód:

 Sub Main () Pokud VerifieMaChaine ("Vis xx Mxx-x classe xx.x") Pak MsgBox "good" Else MsgBox "pas glop" Konec Pokud 'manque l'espace avant le M: ​​Pokud VerifieMaChaine ("Vis xxMxx-x classe xx.x ") Pak MsgBox" dobrý "Jinak MsgBox" pas glop "Konec Pokud Konec Sub Funkce VerifieMaChaine (výraz As String) Jako logický Dim reg jako objekt Nastavit reg = CreateObject (" vbscript.regexp ") 'Existují jednodušší příklady, ale toto je nejúplnější reg.Pattern = "(^ Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2} ) (-) ([a-zA-Z] {1, 3}) (třída) ([a-zA-Z] {1, 2}) (.) ([a-zA-Z] {1}) "VerifieMaChaine = reg.test (expression) End Function End Sub 

Stažení

Kódy popsané v tomto návodu jsou uvedeny v tomto sešitu: //cjoint.com/14au/DHgoqY7wwIw.htm
Předchozí Článek Následující Článek

Nejlepší Tipy