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