VBA - expresii regulate

VBA - expresii regulate

Acest tutorial își propune să explice toate complicațiile legate de utilizarea expresiilor regulate. Veți învăța cum să navigați prin șiruri de caractere pentru a găsi substring-uri folosind expresii regulate (denumite în mod obișnuit RegExp ).

Cerințe preliminare

În editorul VBA.
  • Accesați meniul Instrumente> Referințe.
  • Navigați prin diferitele referințe și verificați următoarea opțiune "Microsoft VBScript Regular Expression 5.5".

Sintaxă și declarație

În aceste exemple, singurii termeni pe care îi vom cere sunt:

Declaratia

Există două opțiuni:

Ca Obiect

 Dim reg Ca set de obiect reg = CreateObject ("vbscript.regexp") 

VBScript_RegExp_55.regexp

 Dim reg Ca VBScript_RegExp_55.regexp Set reg = Nou VBScript_RegExp_55.regexp 

Proprietatile

Indiferent de modul în care ați declarat RegExp, proprietățile vor avea aceeași sintaxă.

Modelul

Modelul trebuie să respecte substringul. Vă permite să navigați prin șir.

 reg.Pattern = "IciLeMotif" 

Test

Vom testa șirul, în cazul în care modelul este găsit, acesta returnează următoarea valoare booleană: Adevărat.

 reg.Test = "IciLeMotif" 

Șirul începe cu A (majuscule)

Modelul ar fi:
  • la începutul șirului
  • există un A

Notatia acestui model este: ^ A

 Funcție Prem_Lettre_A (expresie ca șir) Ca boolean Dim reg ca obiect Set reg = CreateObject ("vbscript.regexp") 'Le Modelul este motivul pentru care se creează un cuvânt cheie: ^' doit être: A reg.Pattern = "Un test de renunțare un Boolean (parfait pour notre fonction Booléenne !!!) Prem_Lettre_A = reg.test (expresie) End Funcție 

Pentru a apela funcția:

 Sub Test_A () 'Nous allons chercher si un String incepe par "A" Majuscule MsgBox Prem_Lettre_A ("alors?") MsgBox Prem_Lettre_A ("Ahhh") MsgBox Prem_Lettre_A 

Șirul începe cu un sau A

Notatia modelului este [aA]

 Sub Test_a_ou_A () 'Nous allons chercher și un String începe par "a" o "MsgBox Prem_Lettre_a_ou_A (" alors? ") MsgBox Prem_Lettre_a_ou_A (" Ahhh ") MsgBox Prem_Lettre_a_ou_A expresie ca șir) ca boolean Dim reg ca set de obiecte reg = CreateObject ("vbscript.regexp") 'iti la première lettre: ^' doit être: a ou A => [aA] reg.Pattern = "^ [aA]" Prem_Lettre_a_ou_A = reg.test (expresie) End Function 

Șirul începe cu o literă superioară

Notația pentru acest model este: [AZ]

 Sub Commence_par_Majuscule () MsgBox "alors" începe cu un majuscule: "& Prem_Lettre_Majuscule (" alors? ") MsgBox" Ahhh începe cu majuscule: "& Prem_Lettre_Majuscule (" Ahhh ") MsgBox" & Prem_Lettre_Majuscule ("Pas mal non?") Funcție End Sub Prem_Lettre_Majuscule (expresie ca String) Ca Boolean Dim reg As Obiect Set reg = CreateObject ("vbscript.regexp") 'ici la premieră Lettre: [AZ] reg.Pattern = "^ [AZ]" Prem_Lettre_Majuscule = reg.test (expresie) End Funcție 

Șirul se termină cu

Utilizați următoarea notație: $

 Sub Fini_Par () MsgBox "La fraza: 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! ") End Sub Funcția Fin_De_Phrase (expresie ca șir) Ca reglaj boolean ca set de obiecte reg = CreateObject (" vbscript.regexp ")" La fin de la chaine doit être : super! 'notation de fin de chaîne: $ reg.Pattern =' super! $ '' notă le $ se place à la fin ... Fin_De_Phrase = reg.test (expresie) End Funcție 

Șirul conține un număr

Notatia pentru acest model este [0-9] . Dacă doriți să găsiți un număr între 3 și 7: [3-7]

 Sub Contient_un_chiffre () MsgBox "aze1rty conștient un chiffre:" & A_Un_Chiffre ("aze1rty") MsgBox "azerty contient un chiffre:" & A_Un_Chiffre ("azerty") End Sub Funcție A_Un_Chiffre reg = CreateObject ("vbscript.regexp") "nu se comporta 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 (expresie) End Funcție 

Șirul conține un număr de 3 cifre

Vom acum cuantifica în RegExp. Pentru a găsi trei apariții, vom folosi bretelele {}.

 Contient_Un_Nombre_A_trois_Chiffres Sub () 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-funcția Nb_A_Trois_Chiffre (expresie ca șir) Ca boolean Dim reg ca set de obiect reg = CreateObject ("vbscript.regexp") 'comportator 3 cifre de la 0 la 9 cu sufragiu' nombre d'occurrence se note {} reg.Pattern = "\ d {3}" 'équivalant de: reg.Pattern = "[0-9] {3}" Nb_A_Trois_Chiffre = 

Șirul conține 3 numere separate

Codul

 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: ") Funcția End Sub Trois_Chiffre (expresie ca șir) Ca reglaj boolean ca set de obiecte reg = CreateObject (" vbscript.regexp ") 'doit comporter 3 chiffres de 0 à 9 qui ne suivent pas' le nombre d'occurence 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 punct) doit repreșenté une une infinité de fois reg.Pattern = "(.) + (\ d {1}) (.) + (\ d {1}) (.) + (\ d {1}) "Trois_Chiffre = 

O variantă

 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 ") Subordonarea funcției End Sub Trois_Chiffre_Simplifiee (expresie ca șir) Ca boolean Dim reg As set de obiect reg = CreateObject (" vbscript.regexp ") 'Comme le même motif: (.) ​​+ (\ D {1}) se répète trois fois: reg.Pattern = "(. + \ d {1}) {3}" Trois_Chiffre_Simplifiee = reg.test (expresie) End Funcția 

Exemplu de utilizare

În exemplul nostru, scopul este de a determina dacă șirul este format din următoarea secvență:
  • 1: șirul începe cu cuvântul "Vis"
  • 2: urmat de un spațiu
  • 3: urmat de 1 până la 3 litere
  • 4: urmat de un spațiu
  • 5: urmată de litera M
  • 6: urmat de 1 până la 2 litere
  • 7: urmat de o cratimă
  • 8: urmat de 1 până la 3 litere
  • 9: urmat de cuvântul "classe" înconjurat de spații ȘI cu litere mici
  • 10: urmărirea a 1-2 litere
  • 11: urmat de un punct
  • 12: urmată de o scrisoare

Rețineți că : Fiecare bloc al modelului este cuprins între paranteze.

Notaţie:

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

Acest lucru ne oferă următorul model

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

Codul:

 SubMinistă () Dacă VerifieMaChaine ("Vis xx Mxx-x Classe xx.x") Apoi MsgBox "bun" Else MsgBox "pas glop" Sfârșit Dacă "manque l'espace avant le M: xx.x ") Atunci MsgBox" bun "Else MsgBox" pas glop "Sfarsit Daca Sfarsit Sub Functia VerifieMaChaine (expresie ca String) Ca Boolean Dim reg As Obiect Set reg = CreateObject (" vbscript.regexp " dar acesta este cel mai complet reg.Pattern = "(^ Vis) () [[a-zA-Z] {1, 3}) () ([a-zA-Z] ) [(a-zA-Z] {1, 3}) (classe) ([a-zA-Z] {1, 2} "VerifieMaChaine = reg.test (expresie) End Function End Sub 

Descarca

Codurile descrise în acest tutorial sunt prezentate în acest registru: //cjoint.com/14au/DHgoqY7wwIw.htm
Articolul Precedent Articolul Următor

Cele Mai Importante Sfaturi