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 (израз) Край на функционалната подпрограма