VBA - Reguläre Ausdrücke

VBA - Reguläre Ausdrücke

In diesem Lernprogramm werden alle Feinheiten im Zusammenhang mit der Verwendung regulärer Ausdrücke erläutert. Sie lernen, wie Sie mit regulären Ausdrücken (im Allgemeinen RegExp genannt ) durch Zeichenfolgen navigieren, um Teilzeichenfolgen zu finden.

Voraussetzungen

Im VBA-Editor.
  • Gehen Sie zum Menü Extras> Referenzen.
  • Durchsuchen Sie die verschiedenen Verweise und aktivieren Sie die folgende Option "Microsoft VBScript Regular Expression 5.5".

Syntax und Deklaration

In diesen Beispielen benötigen wir nur folgende Begriffe:

Die Aussage

Zwei Optionen stehen zur Verfügung:

Als Objekt

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

VBScript_RegExp_55.regexp

 Dim reg As VBScript_RegExp_55.regexp Set reg = New VBScript_RegExp_55.regexp 

Die Eigenschaften

Unabhängig davon, wie Sie RegExp angegeben haben, haben die Eigenschaften dieselbe Syntax.

Das Muster

Das Muster muss mit der Teilzeichenfolge übereinstimmen. Hier können Sie durch die Zeichenfolge navigieren.

 reg.Pattern = "IciLeMotif" 

Prüfung

Wir werden die Zeichenfolge testen. Wenn das Muster gefunden wird, gibt es den folgenden Booleschen Wert zurück: True.

 reg.Test = "IciLeMotif" 

Die Zeichenfolge beginnt mit A (Großbuchstaben)

Das Muster wäre:
  • am Anfang der Zeichenfolge
  • da ist ein A

Die Notation dieses Musters lautet: ^ A

 Funktion Prem_Lettre_A (Ausdruck als Zeichenfolge) As Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") Das Muster ist das Motiv, das bei der Suche nach dem richtigen Muster verwendet wird "^ A" 'le test renvoie un Boolean (Parfait für Notre-Funktion Booléenne !!!) Prem_Lettre_A = reg.test (Ausdruck) End Function 

So rufen Sie die Funktion auf:

 Sub Test_A () 'Nous allons chercher si un String beginne mit "A" Majuscule MsgBox Prem_Lettre_A ("alors?") MsgBox Prem_Lettre_A ("Ahhh") MsgBox Prem_Lettre_A ("Pas mal non?") End Sub 

Die Zeichenfolge beginnt mit einem oder A

Die Notation des Musters ist [aA]

 Sub Test_a_ou_A () 'Nous allons chercher si un String beginne mit "a" oder "A". Ausdruck Als Zeichenfolge) Als Boolesches Dim reg Als Objektsatz reg = CreateObject ("vbscript.regexp") Erstes Schreiben: ^ Gibt Folgendes aus: oder A => [aA] reg.Pattern = "^ [aA]" Prem_Lettre_a_ou_A = reg.test (Ausdruck) End Function 

Die Zeichenfolge beginnt mit einem Großbuchstaben

Die Notation für dieses Muster lautet: [AZ]

 Sub Commence_par_Majuscule () MsgBox "alors?" & Prem_Lettre_Majuscule ("Pas mal non?") End Sub Function Prem_Lettre_Majuscule (Ausdruck als Zeichenfolge) As Boolean Dim reg As Object Set reg = CreateObject ("vbscript.regexp") [AZ] reg.Pattern = "^ [AZ]" Prem_Lettre_Majuscule = reg.test (Ausdruck) End Function 

Die Zeichenfolge endet mit

Verwenden Sie die folgende Notation: $

 Sub Fini_Par () MsgBox "Der Ausdruck: Les RegExp ist super! Der Ausdruck ist super!" & Fin_De_Phrase ("Les RegExp ist super!") MsgBox "Der Ausdruck: Der Ausdruck ist super! Der Ausdruck ist super! super: "& Fin_De_Phrase (" C'est super les RegExp! ") End Sub Function Fin_De_Phrase (Ausdruck als Zeichenfolge) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") : super! 'notation de fin de chaîne: $ reg.Pattern = "super! $"' note le $ se place à la fin ... Fin_De_Phrase = reg.test (Ausdruck) End Function 

Die Zeichenfolge enthält eine Zahl

Die Notation für dieses Muster ist [0-9] . Wenn Sie eine Zahl zwischen 3 und 7 finden möchten: [3-7]

 Sub Contient_un_chiffre () MsgBox "aze1rty contient un chiffre:" & A_Un_Chiffre ("aze1rty") MsgBox "azerty contient un chiffre:" & A_Un_Chiffre ("azerty") End Sub Function A_Un_Chiffre (Ausdruck als Zeichenfolge festlegen B reg = CreateObject ("vbscript.regexp") 'Mit dieser Option können Sie den Wert 0 bis 9 (début, milieu, fin de chaine ...) ändern. reg.Pattern = "[0-9]"' remarque [0 -9] s'écrit également: \ d 'reg.Pattern = "\ d" A_Un_Chiffre = reg.test (Ausdruck) End Function 

Die Zeichenfolge enthält eine dreistellige Zahl

Wir werden jetzt in unserem RegExp "quantifizieren". Um drei Vorkommen zu finden, verwenden wir die geschweiften Klammern {}.

 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 Unterfunktion Nb_A_Trois_Chiffre (Ausdruck als Zeichenfolge) als Boolesches Maß reg als Objektsatz reg = CreateObject ("vbscript.regexp") = "\ d {3}" 'équivalant de: reg.Pattern = "[0-9] {3}" Nb_A_Trois_Chiffre = reg.test (Ausdruck) End Function 

Die Zeichenfolge enthält 3 separate Zahlen

Der Code

 Unter Contient_trois_Chiffres () MsgBox "aze1rty contient 3 chiffres séparés:" & Trois_Chiffre ("aze1rty") MsgBox "a1ze2rty3 contient 3 chiffres séparés:" & Trois_Chiffre ("a1se2rty" & Trois_Chiffre (") ") End Sub Function Trois_Chiffre (Ausdruck als Zeichenfolge) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") Diese Funktion wird für 3 Chiffres von 0 bis 9 ausgeführt, und zwar in der Reihenfolge des Auftretens des Hinweises {} 'le point (.) indique n'importe quel caractère sauf le saut de ligne' le + indique que ce qui le précède (i le point) doit être représenté une une infinité de fois reg.Pattern = "(.) + (\ d {1}) (.) + (\ d {1}) (.) + (\ d {1}) "Trois_Chiffre = reg.test (Ausdruck) End Function 

Eine Variante

 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 ") End Sub Function Trois_Chiffre_Simplifiee (Ausdruck als Zeichenfolge) As Boolean Dim reg As Object Set reg = CreateObject (" vbscript.regexp ") reg.Pattern = "(. + \ d {1}) {3}" Trois_Chiffre_Simplifiee = reg.test (Ausdruck) End Function 

Anwendungsbeispiel

In unserem Beispiel besteht das Ziel darin, festzustellen, ob die Zeichenfolge aus der folgenden Sequenz besteht:
  • 1: Der String beginnt mit dem Wort "Vis"
  • 2: gefolgt von einem Leerzeichen
  • 3: gefolgt von 1 bis 3 Buchstaben
  • 4: gefolgt von einem Leerzeichen
  • 5: gefolgt von dem Buchstaben M
  • 6: gefolgt von 1 bis 2 Buchstaben
  • 7: gefolgt von einem Bindestrich
  • 8: gefolgt von 1 bis 3 Buchstaben
  • 9: gefolgt von dem Wort "Klasse", umgeben von Leerzeichen UND in Kleinbuchstaben
  • 10: Follow-up von 1-2 Buchstaben
  • 11: gefolgt von einem Punkt
  • 12: gefolgt von einem Brief

Beachten Sie Folgendes : Jeder Block des Musters ist in eckige Klammern eingeschlossen.

Notation:

  • 1- => (^ Vis)
  • 2- => ()
  • 3- => ([a-zA-Z] {1, 3})
  • 4- => () --- Hinweis: Auf der Aurait du bist mit dem M qui Anzug ... Mis pour l'exemple
  • 5- => (M)
  • 6- => ([a-zA-Z] {1, 2})
  • 7- => (-)
  • 8- => ([a-zA-Z] {1, 3})
  • 9- => (Klasse)
  • 10- => ([a-zA-Z] {1, 2})
  • 11- => (\.)
  • 12- => ([a-zA-Z] {1})

Dies ergibt das folgende Muster

(^ Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2}) (-) ([a-zA-Z ] {1, 3}) (Klasse) ([a-zA-Z] {1, 2}) (.) ([A-zA-Z] {1}) "

Der Code:

 Sub Main () Wenn VerifieMaChaine ("Vis xx Mxx-x classe xx.x"), dann ist MsgBox "good" Else MsgBox "pas glop" End xx.x ") Dann MsgBox" gut "Sonst MsgBox" pas glop "Ende wenn Ende Unterfunktion VerifieMaChaine (Ausdruck als Zeichenfolge) Als Boolean Dim reg Als Objektmenge reg = CreateObject (" vbscript.regexp ") 'Es gibt ein einfacheres Beispiel, aber dieses ist das vollständigste reg.Pattern = "(^ Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2} ) (-) ([a-zA-Z] {1, 3}) (Klasse) ([a-zA-Z] {1, 2}) (.) ([a-zA-Z] {1}) "VerifieMaChaine = reg.test (Ausdruck) End Function End Sub 

Herunterladen

Die in diesem Lernprogramm beschriebenen Codes sind alle in dieser Arbeitsmappe aufgeführt: //cjoint.com/14au/DHgoqY7wwIw.htm
Vorherige Artikel Nächster Artikel

Top-Tipps