VBA - Регулярни изрази

VBA - Регулярни изрази

Този урок има за цел да обясни всички тънкости, свързани с използването на регулярни изрази. Ще научите как да навигирате през низове, за да намерите поднизове, използвайки регулярни изрази (обикновено наричани RegExp ).

Предварителни

В редактора VBA.
  • Отворете менюто Инструменти> Референции.
  • Прегледайте различните препратки и проверете следната опция "Microsoft VBScript Regular Expression 5.5".

Синтаксис и декларация

В тези примери единствените условия, които ще изискваме, са:

Изявлението

Налични са две опции:

Като обект

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

VBScript_RegExp_55.regexp

 Dim reg As VBScript_RegExp_55.regexp Задайте reg = Нов VBScript_RegExp_55.regexp 

Имотите

Без значение как сте заявили RegExp, свойствата ще имат същия синтаксис.

Шаблонът

Шаблонът трябва да съответства на подниз. Тя ви позволява да се придвижвате в низ.

 reg.Pattern = "IciLeMotif" 

Тест

Ще тестваме низа, ако моделът е намерен, той връща следната булева стойност: True.

 reg.Test = "IciLeMotif" 

Строката започва с A (главни букви)

Моделът ще бъде:
  • в началото на низа
  • има A

Нотата на този модел е: ^ A

 Функция Prem_Lettre_A (израз As String) Както булеви Dim reg As Object Set reg = CreateObject ("vbscript.regexp") 'Le Pattern е мотив que l'on recherche' début de chaîne: ^ 'doit être: A reg.Pattern = "^ A" 'тест renvoie un Boolean (parfait pour notre fonction Booléenne !!!) Prem_Lettre_A = reg.test (израз) Крайна функция 

За да извикате функцията:

 Sub Test_A () 'Nous allons chercher si un String започва с "A" Majuscule MsgBox Prem_Lettre_A ("alors?") MsgBox Prem_Lettre_A ("Ahhh") MsgBox Prem_Lettre_A ("Pas mal non?") End Sub 

Нишката започва с a или A

Нотата на модела е [aA]

 Sub Test_a_ou_A () "Всички албуми, които ви дават, са с" A "или" A "MsgBox Prem_Lettre_a_ou_A (" Ahhh ") MsgBox Prem_Lettre_a_ou_A (" Pas mal non? ") израз As String) Като булев дим рег. като обект 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 (израз) Край на функцията 

Струната започва с главна буква

Нотата за този шаблон е: [AZ]

 Sub Commence_par_Majuscule () MsgBox "alors? Commence par une majuscule:" & Prem_Lettre_Majuscule ("alors?") MsgBox "Ahhh commence par une majuscule:" & Prem_Lettre_Majuscule ("Ahhh") MsgBox & Prem_Lettre_Majuscule ("Pas mal non?") Край Подфункция Prem_Lettre_Majuscule (израз As String) Като булев дим като обект Set reg = CreateObject ("vbscript.regexp") 'ici la premiere lettre: ^' doit être une lettre Majuscule: [AZ] reg.Pattern = "^ [AZ]" Prem_Lettre_Majuscule = reg.test (израз) Край на функцията 

Нишката завършва с

Използвайте следната нотация: $

 Sub Fini_Par () MsgBox "Фраза: Les RegExp c'est super! Se termine par super:" & Fin_De_Phrase ("Les RegExp c'est super!") MsgBox "Фраза: C'est super les RegExp! super: "& Fin_De_Phrase (" C'est super les RegExp! ") Край Подфункция Fin_De_Phrase (израз As String) Като булев дим рег. като обект Set reg = CreateObject (" vbscript.regexp ") 'La fin de la chaine doit être : супер! 'notation de fin de chaîne: $ reg.Pattern = "super! $"' бележка е $ s място а на фина ... Fin_De_Phrase = reg.test (израз) Край на функцията 

Низът съдържа число

Нотацията за този модел е [0-9] . Ако искате да намерите номер между 3 и 7: [3-7]

 (Aze1rty) MsgBox "azerty contient un chiffre: reg = CreateObject ("vbscript.regexp") 'за да се превърне в по-малко от 0 до 9 точки (дебют, среда, финал и т.н.) reg.Pattern = "[0-9]"' remarque [0 D 'reg.Pattern = "d" A_Un_Chiffre = reg.test (израз) Край на функцията 

Низът съдържа 3-цифрен номер

Сега ще "количествено" в нашия RegExp. За да намерите три появявания, ще използваме фигурни скоби {}.

 Под 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 Подфункция Nb_A_Trois_Chiffre (израз As String) Като булева дим рег. Като обект набор reg = CreateObject ("vbscript.regexp") 'doit comporter 3 chiffres de 0 à 9 qui 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 (израз) Край на функцията 

Поредицата съдържа 3 отделни номера

Кодът

 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") ") Крайна подфункция Trois_Chiffre (израз As String) Като булев дим. Като обектен набор reg = CreateObject (" vbscript.regexp ") 'doit comporter 3 chiffres de 0 à 9 qui ne suivent pas' le nombre d'occurrence se note {} 'le point (.) Индикаторът не е вписан в каретата на легендата, когато е влязъл в полето за изчисляване на стойността на индекса. + (d {1}) (.) + (d {1}) (.) + ({1}) "Trois_Chiffre = reg.test (израз) Край на функцията 

Вариант

 Под 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 ") Край Подфункция Trois_Chiffre_Simplifiee (израз As String) Като булев дим. Като обект Set reg = CreateObject (" vbscript.regexp ") 'Comme le même motif: (.) ​​+ (\ T reg.Pattern = "(. + \ t {1}) {3}" Trois_Chiffre_Simplifiee = reg.test (израз) Край на функцията 

Пример за използване

В нашия пример целта е да се определи дали низът се състои от следната последователност:
  • 1: низът започва с думата "Vis"
  • 2: последвано от интервал
  • 3: последвано от 1 до 3 букви
  • 4: последвано от интервал
  • 5: последвано от буквата М
  • 6: последвано от 1 до 2 букви
  • 7: последвано от тире
  • 8: последвано от 1 до 3 букви
  • 9: последвано от думата "classe", заобиколена от интервали И в малки букви
  • 10: проследяване на 1-2 букви
  • 11: последвано от точка
  • 12: последвано от писмо

Обърнете внимание, че : Всеки блок от шаблона е заграден между скоби.

нотация:

  • 1- => (^ Vis)
  • 2- => ()
  • 3- => ([a-zA-Z] {1, 3})
  • 4- => () --- Забележка: в aurait pu l'insérer avec le M qui suit ... Mis pour l'exemple
  • 5- => (М)
  • 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})

Това ни дава следния модел

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

Кодът:

 Под главната () Ако VerifieMaChaine ("Vis xx Mxx-x classe xx.x") Тогава MsgBox "добър" Else MsgBox "pas glop" Край Ако 'manque l'espace avant le M: ​​Ако VerifieMaChaine ("Vis xxMxx-x classe xx.x ") Тогава MsgBox" добър "Else MsgBox" Пан Глоп "Край Ако Край Под-функция VerifieMaChaine (израз As String) Като Булев Дим Рег Като Обект Set reg = CreateObject (" vbscript.regexp ") 'Има по-прост пример, но тази е най-пълната reg.Pattern = "(^ Vis) () ([a-zA-Z] {1, 3}) () (M) ([a-zA-Z] {1, 2} ) (-) ([a-zA-Z] {1, 3}) (classe) ([a-zA-Z] {1, 2}) (.) ([a-zA-Z] {1}) "VerifieMaChaine = reg.test (израз) Край на функционалната подпрограма 

Изтегли

Кодовете, описани в този урок, са изброени в тази работна книга: //cjoint.com/14au/DHgoqY7wwIw.htm
Предишна Статия Следваща Статия

Топ Съвети