1.4.5 Регулярні вирази у VB.NET
Для роботи з регулярними виразами в VB.NET використовується клас Regex, що знаходиться в просторі імен System.Text.RegularExpressions. За допомогою цього класу ви можете проводити наступні дії:
пошук підрядків за шаблоном;
заміна підрядків за шаблоном;
порівняння рядка з шаблоном;
розділення рядка на підрядки з використанням шаблонів.
Для твору дій з регулярними виразами необхідно створити екземпляр класу Regex. Для цього використовується стандартний конструктор New. Він переобтяжений і має дві комбінації параметрів. Ви можете задати тільки шаблон (змінна типу String), який використовуватиметься надалі, або шаблон і параметри об'єкту. Параметри задаються константами з перерахування Regexoptions.
Пошук підрядків, відповідних шаблону проводиться за допомогою переобтяженого методу Matches. Він може приймати 4 комбінації параметрів. Перший параметр - рядок, в якому проводитиметься пошук. Як другий параметр можна встановити позицію, з якою буде початий пошук. Також другим параметром можна вказати шаблон (якщо він не збігається з шаблоном, вказаним в конструкторі при створенні об'єкту). І остання комбінація параметрів - рядок для пошуку, шаблон і параметри пошуку, задані комбінацією констант перерахування Regexoptions.
Метод повертає об'єкт Matchcollection. Це колекція, яка містить об'єкти Match. Отримати об'єкт Match можна за допомогою індексованої властивості Item колекції. Нумерація елементів починається з нуля. Щоб отримати знайдений підрядок, слід використовувати властивість Value об'єкту Macth.
Нижче приведений невеликий приклад пошуку тегів в HTML коді.
Dim regexp As New Regex("<(.*?) >")
Dim html As String
Dim i As Integer
Dim m As Matchcollection
html = "<p>ето <а href='http://vbnet.ru'>пример</a> <b>поїська</b></p>"
m = regexp.Matches(html)
For i = 0 To m.Count – 1
Msgbox(m.Item(i).Value)
Next
Інша часто використовувана дія, вироблювана за допомогою класу Regex, - заміна підрядків з використанням шаблонів. Для заміни використовується метод Replace. Він, як і метод Matches, переобтяжений. Replace може приймати 10 комбінацій параметрів. Метод може приймати комбінації з наступних параметрів:
input - початковий рядок;
replacement - рядок, на який будуть замінені знайдені підрядки;
count - максимальна кількість замін;
startat - позиція в рядку input, з якою проводитиметься заміна;
pattern - замінюваний шаблон;
options - опції. Може приймати константи з перерахування Regexoptions;
evaluator - об'єкт Matchevaluator.
Метод повертає змінну типу String - рядок, в якому були вироблені заміни.
Dim regexp As New System.Text.RegularExpressions.Regex("<(.*?) >")
Dim Inputstring As String
Inputstring = "p>ето <а href='http://vbnet.ru'>пример</a> <b>pfvtys</b></p>"
txttext.Text = regexp.Replace(txttext.Text, "[вирізаний]", Regexoptions.Multiline)
Порівняння рядка з шаблоном - найпростіша операція, яку можна провести за допомогою класу Regex. Порівняння здійснюється методом Ismatch. Він переобтяжений і може приймати такі ж параметри, як і метод Matches. Значення, що повертається, має тип Boolean. Метод повертає True, якщо тестований рядок збігається з шаблоном і False інакше.Нижче приведений приклад порівняння рядка з шаблоном.
Dim regexp As New System.Text.RegularExpressions.RegEx ("[0-9]+")
Dim str As String
str = "1234567890"
Msgbox (regexp.IsMatch(str).ToString)
str = "abc"
Msgbox (regexp.IsMatch(str).ToString)
Розділення рядка використовується рідше за решту операцій. Розділення рядка з використанням регулярних виразів дуже схоже із звичайним розділенням рядка функцією Split. Але якщо в Split як роздільник використовувався рядок, то тут роздільником є регулярний вираз.
Для розділення рядка використовується переобтяжений метод Split класу Regex. Він може приймати такі ж комбінації параметрів, як і методи Matches і Ismatch. Split повертає масив типу String, який містить рядки, отримані з початкового рядка. Масив індексується з нуля.
Допустимо, потрібно розбити рядок по декількох роздільниках (скажімо, "-", "." і ","). Можна використовувати для цього функцію Split, але при цьому буде багато метушні з масивами, код буде сильно захаращений і знизиться швидкодія. А зараз подивимося, як легко ця операція буде проведена з використанням регулярних виразів. Роздільником буде наступний вираз: "[-\.,]". Наступний код розбиває рядок на підрядки з використанням цього шаблону.
Dim regexp As New Regex("[-\.,]")
Dim i As Integer
Dim s() As String
Dim str As String
str = "раз-два,трі.четире,пять"
s = regexp.Split(str)
For i = 0 To s.GetUpperBound(0)
Console.WriteLine(s(i))
Next
За умовчанням Regex компілює регулярні вирази в послідовність внутрішніх байт-кодов регулярних виразів (це високорівневий код). При виконанні регулярних виразів відбувається інтерпретація байт-кода.
Якщо при створенні об'єкту Regex в конструкторі New була встановлена константа Compiled, то Regex буде скомпільований в MSIL (Microsoft intermediate language). Це дозволить JIT-компилятору перетворити вираз в машинний код, що значно підвищує продуктивність.
Проте у виразах, що компілюють, є і погана сторона - їх не можна вивантажити з пам'яті. Регулярні вирази, що компілюють, вивантажуються тільки при завершенні роботи всього застосування. Regex залишається в пам'яті, навіть коли сам об'єкт звільнений і знищений складальником сміття.
Тому, слід задуматися над тим, чи варто встановлювати прапор Compiled. Якщо ви постійно використовуєте декілька регулярних виразів, то краще буде їх скомпілювати.
Регулярні вирази - могутня технологія для роботи з текстом. Розробники Microsoft все-таки вбудували підтримку цієї технології в .NET Framework. Можливо, вони зробили це тому що .NET Framework використовується в Web-застосуваннях (ASP .NET), де регулярні вирази більше всього необхідні.
... іла необхідність зміни ролі бібліотеки, вона повинна перетворитися в центр інформаційного й комунікативного забезпечення людей. Розділ ІІ. Основні шляхи автоматизації шкільних бібліотек району На жаль, впровадження нових інформаційних технологій у шкільні бібліотеки поки досить проблематично. Більшість сільських бібліотек на сьогоднішній день взагалі не мають комп'ютерів. Можна виділити два ...
... розділу можна розподілити за десятьма діленнями, тому виникає велика кількість штучних рішень, відбувається нерівномірність наповнення ділень. У той же час застосування в бібліотечно-бібліографічній класифікації десяткових індексів мало велике значення, і їх стали широко використовувати. Такі індекси дають можливість деталізувати систему як це необхідно, подрібнюючи попередні ділення на десять ...
... втілення вже залежить не тільки від прогресу науково-технічної думки, але й від соціально-економічних і правових умов, в яких вони існують. 2.2 Сучасні парадигми інформатизації суспільства в умовах глобалізації Інформатизація сучасного суспільства побудована на певних законах і постулатах, які надають їм постійного явища. У різних наукових напрямах по-різному трактується сучасне інформаційне ...
... В АБС АКБ «ПРОМІНВЕСТБАНК» ТА ОЦІНКА РІВНЯ ВРАЗЛИВОСТІ БАНКІВСЬКОЇ ІНФОРМАЦІЇ 3.1 Постановка алгоритму задачі формування та опис елементів матриці контролю комплексної системи захисту інформації (КСЗІ) інформаційних об’єктів комерційного банку В дипломному дослідженні матриця контролю стану побудови та експлуатації комплексної системи захисту інформації в комерційному банку представлена у вигляді ...
0 комментариев