Цей підручник покаже, як використовувати регулярний вираз у VBA.
Що таке регулярний вираз?
Regex означає регулярне вираження. Регулярний вираз - це шаблон, що складається з послідовності символів, які можна використовувати для пошуку відповідного шаблону в іншому рядку. Для того, щоб використовувати регулярний вираз у VBA, вам потрібно використовувати об'єкт RegExp.
Шаблон, такий як [A-C], можна використовувати для пошуку та відповідності великої літери від A до C у послідовності. Шаблони регулярних виразів мають власний синтаксис і можуть бути побудовані за допомогою символу або послідовності символів.
Відповідність персонажів
Наступна таблиця показує синтаксис, який дозволить вам створювати шаблони регулярних виразів.
Синтаксис шаблону | Опис | Приклад | Знайдено відповідність |
---|---|---|---|
. | Відповідає будь -якому окремому символу, крім vbNewLine | f.n | вентилятор, fon, f@n, fwn |
[персонажів] | Відповідає будь -якому окремому символу між дужками [] | [fn] | Було б відповідати лише "f" або "n" у вентиляторі |
[^символи] | Відповідає будь -якому окремому символу, що не знаходиться в дужках [] | [^fn] | Так би відповідало "j" у "fjn" |
[початок-кінець] | Відповідає будь -якому символу, що є частиною діапазону в дужках [] | [1-5] | Відповідає "4" та "5" у "45" |
\ w | Відповідає буквено -цифровим символам та підкреслення, але не пробілу | \ w | Відповідатиме "c" у ", c". |
\ W | Відповідає будь-яким алфавітно-цифровим символам та символу підкреслення | \ W | Відповідає “@” у “bb@bb” |
\ s | Відповідає будь -якому символу пробілу, такому як пробіли та табуляції | \ s | Було б відповідати "" у "Це" |
\ S | Відповідає будь-якому символу, що не є пробілом | \ S | Відповідає "T" та "h" у "T h" |
\ d | Відповідає будь -якій одиничній десятковій цифрі | \ d | Відповідає “7” у “a7h” |
\ D | Відповідає будь-якій одиничній недесятковій цифрі | \ D | Відповідає j у "47j" |
\ | Уникає спеціальних символів, що потім дозволяє шукати їх | \. | Було б відповідати "." у "59.pQ" |
\ t | Вкладка | \ t | Відповідатиме символу табуляції |
\ r | Повернення вагона | \ r | Відповідає поверненню каретки (vbCr) |
\ n | vbNewLine (vbTab) | \ n | Підійде до нового рядка |
Квантори
Ви можете використовувати квантори, щоб вказати, скільки разів ви хочете, щоб шаблон відповідав рядку.
Квантор | Опис | Приклад | Знайдено відповідність |
---|---|---|---|
* | Відповідає нулю або більше входам | fn*a | fna, fa, fnna, fnnna, fnfnnna |
+ | Відповідає одному або кільком входам | fn+a | fna, fnna, fnfnna |
? | Відповідає нулю або одиниці | fn? a | fa, fna |
{n} | Багато разів відповідає «n» | d \ W {4} | Відповідатиме "d …". у “d…. & 5hi” |
{n,} | Відповідає принаймні "n" кількість разів | d \ W {4,} | Відповідатиме "d…. &" У "d…. & 5hi" |
{n, m} | Кількість разів відповідає n і m | d \ W {1,8} | Відповідатиме "d…. &&&&" у "d…. &&&& 5hi" |
Групування
Групування або захоплення дозволяє використовувати шаблон для захоплення та вилучення частини рядка. Таким чином, не тільки шаблон узгоджується, але і частина рядка, яка відповідає шаблону, захоплюється.
Візерунок | Опис | Приклад | Знайдені та захоплені збіги |
---|---|---|---|
(вираз) | Групує та фіксує шаблон у дужках | (\ W {4}) | Згрупував би та захопив “@@@@” з “1 @@@@ 1jlmba” |
Як використовувати регулярний вираз у VBA
Щоб використовувати регулярний вираз у VBA, спочатку потрібно встановити посилання в редакторі VBE. У редакторі VBE перейдіть до Інструменти> Посилання> Регулярні вирази Microsoft VBScript.
Ось властивості об’єкта RegExp:
- Візерунок - Шаблон, який ви збираєтесь використовувати для зіставлення з рядком.
- IgnoreCase - Якщо значення True, то відповідність ігнорує регістр літер.
- Глобальні - Якщо значення True, то знайдуться всі збіги шаблону в рядку. Якщо False, то буде знайдено лише перше збіг.
- MultiLine - Якщо значення "Істинна", узгодження зразків відбувається між розривами рядків.
Ось методи об’єкта RegExp:
- Тестування - Шукає шаблон у рядку та повертає True, якщо знайдено відповідність.
- Замінити - Замінює входження шаблону рядком заміни.
- Виконати - Повертає збіги шаблону з рядком.
Тестування шаблону на відповідність рядку
Ви можете використовувати метод Test, щоб перевірити, чи відповідає шаблон шаблону послідовності у вхідному рядку. Результат є істинним, якщо знайдено відповідність. Наступний код покаже вам, як перевірити шаблон на рядок:
12345678910111213 | Sub RegexTestingAPattern ()Яскравий рядок Один як рядокDim regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Налагодження.Надрукувати regexOne.Test (stringOne)End Sub |
Результат такий:
Заміна візерунка в рядку
Ви можете використовувати метод Replace, щоб замінити перший екземпляр відповідного шаблону в рядку або всі екземпляри відповідного шаблону в рядку. Якщо для Global встановлено значення False, замінюється лише перший екземпляр. Наступний код покаже вам, як замінити шаблон у рядку:
1234567891011 | Sub RegexReplacingAPattern ()Яскравий рядок Один як рядокDim regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "Це номер"regexOne.Global = НеправдаstringOne = "Це число 718901"Debug.Print regexOne.Replace (stringOne, "Це новий номер")End Sub |
Результат такий:
Щоб замінити лише номерну частину рядка, що використовується вище, ви використаєте такий код:
1234567891011 | Sub RegexReplacingAPattern ()Яскравий рядок Один як рядокDim regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = НеправдаstringOne = "Це число 718901"Debug.Print regexOne.Replace (stringOne, "777192")End Sub |
Результат такий:
Щоб замінити кожен екземпляр певного шаблону в рядку, ви повинні встановити глобальне значення True. Наступний код показує, як замінити кожен екземпляр -A1289C- у рядку:
1234567891011 | Sub RegexReplacingEveryInstanceOfAPattern ()Яскравий рядок Один як рядокDim regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = ПравдаstringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")End Sub |
Відповідність та відображення візерунка в рядку
Ви можете використовувати метод Execute для відповідності одному або всім екземплярам шаблону в рядку. Наступний код показує, як зіставити та відобразити всі екземпляри шаблону з рядка:
123456789101112131415161718 | Sub RegexMatchingAndDisplayingAPattern ()Яскравий рядок Один як рядокDim regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "A.C"regexOne.Global = ПравдаregexOne.IgnoreCase = ІгноруватиCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Встановіть theMatches = regexOne.Execute (stringOne)Для кожного матчу в матчахDebug.Print Match.ValueДаліEnd Sub |
Результат такий:
Скажімо, ми хотіли знайти тільки -ADC- з наведеного вище рядка. Наступний код показує, як зіставити та відобразити лише -ADC- з рядка:
123456789101112131415161718 | Sub RegexMatchingAndDisplayingAPattern ()Яскравий рядок Один як рядокDim regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "\-\ A.C \-"regexOne.Global = НеправдаregexOne.IgnoreCase = ІгноруватиCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Встановіть theMatches = regexOne.Execute (stringOne)Для кожного матчу в матчахDebug.Print Match.ValueДаліEnd Sub |
Вивчення регулярного виразу може зайняти деякий час, але це надзвичайно потужний інструмент для ідентифікації/маніпулювання рядками тексту. Він також широко використовується в мовах програмування.