
- •1. Основні терміни технології програмування
- •2. Класифікація програмного забезпечення
- •Поняття життєвого циклу розробки програмного забезпечення.
- •Етапи розробки
- •Базові моделі розробки програмних продуктів.
- •Вимоги до методології та технології розробки пп
- •Каскадна модель
- •3. Модель прототипування програмного продукту
- •4. Спіральна модель
- •5. Модель rad
- •6. Модель екстремального програмування (xp)
- •7. Модель msf (Microsoft Solutions Framework)
- •Принципи й види налагодження.
- •Аксіоми налагодження.
- •Автономне налагодження модуля.
- •Комплексне налагодження програмного засобу.
- •Інструменти розробки програмних засобів.
- •Інструментальні середовища розробки й супроводу програмних засобів.
- •Інструментальні середовища програмування.
- •Поняття комп'ютерної технології розробки програмних засобів і її робочі місця.
- •Інструментальні системи технології програмування.
- •Приклад реалізації класу Log.
- •Розробка програмного продукту з двома потоками
- •Визначення крапок контролю програмного продукту.
- •Визначення кількості викликів
- •Визначення ступеня покриття
- •Фундаментальні проблеми профілювання.
- •Причини рефакторингу
- •Підстави для проведення рефакторингу
- •Прийоми рефакторингу
- •Автоматизований рефакторинг
- •1. Принципи повторного використання елементів програм
- •2. Створення шаблонів форм у вигляді файлів
- •3. Використання шаблонів форм у новому проекті
- •4. Збереження шаблонів форм в депозитарії
- •5. Використання шаблонів форм із депозитарію
- •Шаблони класів на мові програмування с#.
- •Приклади шаблонів (класів шаблонів).
- •1. Використання підпрограм в оброблювачах подій
- •2. Звертання до активного компонента не за ім’ям
- •2. Обробка групи компонентів
- •4. Обробка компонентів як масиву
- •5. Сортування даних у компонентах
- •1. Принципи модульного програмування
- •2. Принцип «приховання даних»
- •3. Поняття модуля в Object Pascal
- •4. Структура модульного файлу
- •5. Створення модуля в Object Pascal
- •6. Створення модуля з переліком стандартних діалогів
- •7. Використання текстових констант у модулях
- •8. Створення підпрограм для обробки компонентів
- •1. Поняття dll
- •2. Створення dll бібліотеки в Delphi
- •3. Внесення форм в dll
- •4. Використання dll бібліотеки
- •Питання для самоконтролю
- •Використання регулярних виразів у програмах.
- •1. Призначення зовнішніх компонентів
- •2. Установка й видалення зовнішніх компонентів
- •3. Установка й видалення бібліотек компонентів
- •4. Запуск зовнішніх програм і файлів
- •Питання для самоконтролю
- •1. Загальні принципи технології com
- •2. Робота з com-сервером Microsoft Word
- •Робота з документами в Microsoft Word
- •Використання шаблону для формування документів
- •Робота з таблицями
- •Вставка малюнків і їх форматування
- •1. Операції з Com-Сервером Microsoft Excel
- •Робота із книгами в Microsoft Excel
- •Робота з аркушами книги в Microsoft Excel
- •Використання шаблону для формування книги
- •Формування таблиці
- •6. Форматування чарунок
- •Види довідкових систем
- •Інші засоби підтримки користувача
- •2.Формати довідників
- •3.Створення довідки у форматі html Help
- •4.Створення контекстної довідки
- •5.Інтеграція довідкового файлу в додаток
- •Перелік шаблонів, що породжують
- •Перелік структурних шаблонів
- •Перелік шаблонів поведінки
- •Призначення патерну Singleton
- •Реалізація патерну Singleton
- •Результати застосування патерну Singleton
- •Призначення патерна Observer
- •Постановка проблеми, що вирішується за допомогою патерна
- •Структура патерна Observer
- •Приклад патерна Observer
- •Реалізація патерна Observer
- •Реалізація патерну Observer: до та після
- •Призначення патерну Strategy
- •Опис патерну Strategy
- •Реалізація патерну Strategy
- •Призначення патерна Factory Method
- •Опис патерну Factory Method
- •Реалізація патерна Factory Method
Питання для самоконтролю
1. Що таке DLL бібліотеки? У чому їх переваги?
2. Дайте їх характеристику статичному зв’язуванню DLL.
3. Дайте їх характеристику динамічному зв’язуванню DLL.
4. Як створити проект DLL? Якові структуру він має?
5. Як описуються підпрограми в DLL?
6. Опишіть процедуру додавання форми в DLL бібліотеку.
7. Опишіть процедуру виклику DLL бібліотеки через статичне зв'язування.
8. Які етапи требі виконати для динамічного зв’язування DLL?
9. Які змінні треба описати для динамічного зв’язування DLL?
10. Опишіть процедуру виклику DLL бібліотеки через динамічне зв'язування.
Лекція №11
Тема: Регулярні вирази та їх використання.
Мета: Отримати знання про регулярні вірази, навчитися створювати регулярні вирази для пошуку даних та обробки рядкових даних. Придбати знання про використання регулярних виразів у програмах.
Перелік питань, що розглядаються на лекції:
Поняття регулярного выразу, його складові.
Використання регулярних виразів у програмах.
Поняття регулярного выразу, його складові.
Регулярний вираз - це шаблон, який обробник регулярних виразів намагається зіставити з введенням текстом. Шаблон складається з односимвольних або багатосимвольний літералів, операторів конструкцій. Короткий вступ див Регулярні вирази в. NET Framework. У кожному розділі цього короткого довідника наводиться перелік конкретної категорії символів, операторів і конструкцій, які можна використовувати для завдання регулярних виразів:
Escape-символи
класи символів
прив'язки
конструкції групування
квантори
Конструкції зворотних посилань
конструкції зміни
підстановки
Параметри регулярних виразів
Інші конструкції
Escape-символи
Зворотна коса риса (\) в регулярних виразах вказує, що наступний за нею символ або є спеціальним знаком (як показано в наступній таблиці), або повинен інтерпретуватися буквально. Додаткові відомості див Escape-знаки в регулярних виразах.
Escape-символ |
опис |
шаблон |
відповідності |
\ a |
Відповідає знаку дзвіночка, \ u0007. |
\ a |
"\ u0007" в "Помилка!" + '\ U0007' |
\ b |
У класі символів відповідає знаку BACKSPACE, \ u0008. |
[\ b] {3,} |
"\ b \ b \ b \ b" в "\ b \ b \ b \ b" |
\ t |
Відповідає знаку табуляції, \ u0009. |
(\ w +) \ t |
"елемент1 \ t", "елемент2 \ t" в "елемент1 \ tелемент2 \ t" |
\ r |
Відповідає знаку повернення каретки, \ u000D. (\ r не еквівалентний знаку початку нового рядка, \ n.) |
\ r \ n (\ w +) |
"\ r \ nЗдесь" в "\ r \ nЗдесь мається \ nдве рядка." |
\ v |
Відповідає знаку вертикальної табуляції, \ u000B. |
[\ v] {2,} |
"\ v \ v \ v" в "\ v \ v \ v" |
\ f |
Відповідає знаку перекладу сторінки, \ u000C. |
[\ f] {2,} |
"\ f \ f \ f" в "\ f \ f \ f" |
\ n |
Відповідає знаку нового рядка, \ u000A. |
\ r \ n (\ w +) |
"\ r \ nЗдесь" в "\ r \ nЗдесь мається \ nдве рядка." |
\ e |
Відповідає escape-знаку, \ u001B |
\ e |
"\ x001B" в "\ x001B" |
\ nnn |
Використовує восьмеричне подання для вказівки символу (nnn складається з двох або трьох цифр). |
\ w \ 040 \ w |
"a b", "c d" в "a bc d" |
\ x nn |
Використовує шістнадцяткове подання для вказівки символу (nn складається рівно з двох цифр). |
\ w \ x20 \ w |
"a b", "c d" в"a bc d" |
\ c X \ c X |
Відповідає керуючому символу ASCII, який заданий як X або x, де X або x є буквою керуючого символу. |
\ cC |
"\ x0003" в "\ x0003" (Ctrl-C) |
\ u nnnn |
Збіг зі знаком Юникода у шістнадцятковому представленні (строго чотири цифри, представлені як nnnn). |
\ w \ u0020 \ w |
"a b", "c d" в "a bc d" |
\ |
Якщо за цим знаком слід символ, що не розпізнаний як escape-символ з цієї та інших таблиць даної теми, то відповідає в точності цього символу. Наприклад, \ * - це те ж саме, що і \ x2A, а \. - Те ж саме, що і \ x2E. Це дозволяє оброблювачу регулярних виразів розпізнавати мовні елементи (такі як * або?) І символьні літерали (представлені як \ * або \?). |
\ d + [\ +-x \ *] \ d + \ d + [\ +-x \ * \ d + |
"2 +2" і "3 * 9" в "(2 +2) * 3 * 9" |
Класи символів
прив'язки
Прив'язки, або атомарні затвердження нульової ширини, приводять до успіху або збою зіставлення, залежно від поточної позиції в рядку, але не наказують оброблювачу переміщатися по рядку або обробляти символи. Метасимволи, наведені в наступній таблиці, є прив'язками. Додаткові відомості див Прив'язки в регулярних виразах.
затвердження |
опис |
шаблон |
відповідності |
^ |
Відповідність має починатися на початку рядка |
^ \ d {3} |
"901" в "901-333 -" |
$ |
Відповідність має виявлятися в кінці рядка або до символу \ n в кінці рядка. |
- \ d {3} $ |
"-333" В "-901-333" |
\ A |
Відповідність має виявлятися на початку рядка. |
\ A \ d {3} |
"901" в "901-333 -" |
\ Z |
Відповідність має виявлятися в кінці рядка або до символу \ n в кінці рядка. |
- \ d {3} \ Z |
"-333" В "-901-333" |
\ z |
Відповідність має виявлятися в кінці рядка. |
- \ d {3} \ z |
"-333" В "-901-333" |
\ G |
Відповідність має виявлятися в тій точці, де закінчується попереднє відповідність. |
\ G \ (\ d \) |
"(1)", "(3)", "(5)" в "(1) (3) (5) [7] (9)" |
\ b |
Відповідність має виявлятися на кордоні між символом \ w (алфавітно-цифровим) і символом \ W (Не алфавітно-цифровим). |
\ b \ w + \ s \ w + \ b |
"them theme", "them them" в "them theme them them" |
\ B |
Відповідність не повинно виявлятися на кордоні \ b. |
\ Bend \ w * \ b |
"ends", "ender" в "end sends endure lender" |
Конструкції групування
Конструкції групування відображають частини виразів регулярних виразів і зазвичай захоплюють частині рядка вхідного рядка. Конструкції групування складаються з мовних елементів, наведених у таблиці нижче. Додаткові відомості див Конструкції угруповання в регулярних виразах.
затвердження |
опис |
шаблон |
відповідності |
(Subexpression) |
Захоплює, відповідні вирази і присвоюємо їм нумерацію, починаючи з 1. |
(\ w) \ 1 |
"ee" в "deep" |
(? <Name> subexpression) |
Виділяє відповідну частину виразу в іменовану групу. |
(? <double> \ w) \ k <double> |
"ee" в "deep" |
(? <Name1 - name2> subexpression) |
Задає збалансоване визначення групи. Додаткові відомості див в підрозділі "Збалансоване визначення групи" розділу Конструкції угруповання в регулярних виразах. |
(((? 'Open' \ () [^ \ (\)] *) + ((? 'Close-Open' \)) [^ \ (\)] *) +) * (? (Open) (? !)) $ |
"((1-3) * (3-1))" в "3 +2 ^ ((1-3) * (3-1))" |
(?: Subexpression) |
Визначає невиделяемую групу. |
Write (?: Line)? |
"WriteLine" в "Console.WriteLine ()" "Write" в "Console.Write (value)" |
(? imnsx-imnsx: subexpression) |
Застосовує або відключає вказані параметри в subexpression. Додаткові відомості див Параметри регулярних виразів. |
A \ d {2} (? I: \ w +) \ b |
"A12xl", "A12XL" в "A12xl A12XL a12xl" |
(? = Subexpression) |
Затвердження позитивного перегляду вперед нульової ширини |
\ w + (? = \.) |
"is", "ran" і "out" в "He is. The dog ran. The sun is out." |
(?! Subexpression) |
Затвердження негативного перегляду вперед нульової ширини |
\ b (?! un) \ w + \ b |
"sure", "used" в "unsure sure unity used" |
(? <= Subexpression) |
Затвердження позитивного перегляду назад нульової ширини. |
(? <= 19) \ d {2} \ b |
"99", "50", "05" в "1851 1999 1950 1905 2003 |
(? <! Subexpression) |
Затвердження негативного перегляду назад нульової ширини. |
(? <! 19) \ d {2} \ b |
"51", "03" в "1851 1999 1950 1905 2003" |
(?> Subexpression) |
Частина вираження пошуку без повернення (або "жадібного" пошуку). |
[13579] (?> A + B +) |
"1ABB", "3ABB" і "5AB" в "1ABB 3ABBC 5AB 5AC |
Квантори
Квантор вказує кількість входжень попереднього елемента (знака, групи або класу знаків), яке повинне бути присутнім у вхідному рядку, щоб було зафіксовано відповідність. Квантори складаються з мовних елементів, наведених у таблиці нижче. Додаткові відомості див Квантори в регулярних виразах.
квантіфікатор |
опис |
шаблон |
відповідності |
* |
Відповідає попереднього елемента нуль або більше разів |
\ d * \. \ d |
".0", "19.9", "219.9" |
+ |
Відповідає попереднього елемента один або більше разів |
"be +" |
"bee" в "been", "be" в "bent" |
? |
Відповідає попереднього елемента нуль або один раз |
“rai? n" |
"ran", "rain" |
{N} |
Попередній елемент повторюється рівно n разів. |
", \ d {3}" |
", 043" в "1,043.6", ", 876", ", 543" і ", 210" в "9,876,543,210" |
{N,} |
Попередній елемент повторюється як мінімум n разів |
"\ d {2,}" |
"166", "29", "1930" |
{N, m} |
Попередній елемент повторюється як мінімум n раз, але не більше ніж m разів. |
"\ d {3,5}" |
"166", "17 668" "19302" в "193024" |
*? |
Попередній елемент не повторюється взагалі або повторюється, але як можна менше число разів. |
\ d *? \. \ d |
".0", "19.9", "219.9" |
+? |
Попередній елемент повторюється один або кілька разів, але як можна менше число разів |
"be +?" |
"be" в "been", "be" в "bent" |
?? |
Попередній елемент не повторюється або повторюється один раз, але як можна менше число разів. |
"rai?? n" |
"ran", "rain" |
{N}? |
Попередній елемент повторюється рівно n разів |
", \ d {3}?" |
", 043" в "1,043.6", ", 876", ", 543" і ", 210" в "9,876,543,210" |
{N,}? |
Попередній елемент повторюється як мінімум n раз (як можна менше). |
"\ d {2,}?" |
"166", "29", "1930" |
{N, m}? |
Попередній елемент повторюється не менше n і не більше m раз (як можна менше). |
"\ d {3,5}?" |
"166", "17 668" "193", "024" в "193024" |
Конструкції зворотних посилань
Зворотній посилання дозволяє згодом ідентифікувати раніше знайдену відповідну частину виразу в тому ж регулярному вираженні. У наступній таблиці перераховані конструкції зворотних посилань, підтримувані регулярними виразами платформи. NET Framework. Додаткові відомості див Конструкції зворотних посилань в регулярних виразах.
Конструкція зворотних посилань |
опис |
шаблон |
збіги |
\ number |
Зворотній посилання. Відповідає значенню нумерованій частині виразу |
(\ w) \ 1 |
"ee" в "seek" |
\ k <name> |
Іменована зворотній посилання. Відповідає значенню іменованого вираження. |
(? <char> \ w) \ k <char> |
"ee" в "seek" |
Конструкції зміни
Конструкції зміни модифікують регулярний вираз, включаючи порівняння за принципом "або-або". Такі конструкції складаються з мовних елементів, наведених у таблиці нижче. Додаткові відомості див Конструкції зміни в регулярних виразах.
конструкція зміни |
опис |
шаблон |
відповідності |
| |
Відповідає будь-якому елементу, розділеному вертикальної рисою (|). |
th (e | is | at) |
"the", "this" в "this is the day." |
(? (Expression) yes | no) |
Відповідає yes у разі відповідності шаблону регулярного виразу, що визначається виразом expression; в іншому випадку відповідає додаткової частини no. expression інтерпретується як твердження нульової ширини. |
(? (A) A \ d {2} \ b | \ b \ d {3} \ b) |
"A10", "910" в "A10 C103 910" |
(? (Name) yes | no) |
Відповідає yes у разі відповідності іменованої або нумерованій групи захоплення name; в іншому випадку відповідає додатковому no. |
(? <quoted> ")? (? (quoted). +?" | \ S + \ s) |
Dogs.jpg, "Yiska playing.jpg" в "Dogs.jpg" Yiska playing.jpg "" |
Підстановки
Підстановки - це мовні елементи регулярних виразів, які підтримуються в шаблонах заміни. Додаткові відомості див Підстановки в регулярних виразах. Наведені в наступній таблиці метасимволи є атомарними твердженнями нульової ширини.
знак |
опис |
шаблон |
шаблон заміни |
вхідна рядок |
строка результату |
$ number |
Заміщає частина рядка, відповідну групі number. |
\ b (\ w +) (\ s) (\ w +) \ b |
$ 3 $ 2 $ 1 |
"один два" |
"два один" |
$ {Name} |
Заміщає частина рядка, відповідну іменованої групі name. |
\ b (? <word1> \ w +) (\ s) (? <word2> \ w +) \ b |
$ {word2} $ {word1} |
"один два" |
"два один" |
$ $ |
Підставляє літерал "$". |
\ b (\ d +) \ s? USD |
$ $ $ 1 |
"103 USD" |
"$ 103" |
$ & |
Заміщає копією повної відповідності. |
(\ $ * (\ d * (\. + \ d +)?) {1}) |
** $ & |
"$ 1.30" |
"** $ 1.30 **" |
$ ` |
Заміщає весь текст вхідного рядка до відповідності. |
B + |
$ ` |
"AABBCC" |
"AAAACC" |
$ ' |
Заміщає весь текст вхідного рядка після відповідності. |
B + |
$ ' |
"AABBCC" |
"AACCCC” |
$ + |
Заміщає останню захоплену групу. |
B + (C +) |
$ + |
"AABBCCDD" |
AACCDD |
$ _ |
Заміщає всю вхідну рядок. |
B + |
$ _ |
"AABBCC" |
"AAAABBCCCC" |
Параметри регулярних виразів
Можна визначити параметри, керуючі інтерпретацією шаблону регулярного виразу обробником регулярних виразів. Багато з цих параметрів можна вказати в шаблоні регулярного виразу або у вигляді однієї або декількох констант RegexOptions. Цей короткий довідник перераховує тільки вбудовуються опції. Додаткові відомості про вбудовані параметрах і параметрах RegexOptions см. у статті Параметри регулярних виразів.
Можна визначити вбудований параметр у двох варіантах.
За допомогою різнобічна конструкцію (? Imnsx-imnsx), де мінус (-) перед параметром або набором параметрів служить для виключення цих параметрів. Наприклад, (? I-mn) включає зіставлення без урахування регістру (i), відключає багатостроковий режим (m) і відключає захоплення неіменованого груп (n). Параметр застосовується до шаблону регулярного вираження від точки, в якій визначено параметр, і діє або до кінця шаблону, або до точки, в якій інша конструкція скасовує параметр.
За допомогою конструкції групування (? Imnsx-imnsx: subexpression), яка визначає параметри для тільки для зазначеної групи.
Механізм регулярних виразів. NET Framework підтримує наступні вбудовані параметри.
параметр |
опис |
шаблон |
збіги |
i |
Використовувати відповідність без урахування регістру. |
\ b (? i) a (?-i) a \ w + \ b |
"aardvark", "aaaAuto" in "aardvark AAAuto aaaAuto Adam breakfast” |
m |
Використовувати багатостроковий режим. ^ І $ відповідають початку і кінця рядку (line), а не початку і кінця рядку (string). |
Приклад див підрозділі "Багаторядковий" розділу Параметри регулярних виразів. |
|
n |
Чи не захоплювати неіменовані групи. |
Приклад див підрозділі "Тільки явні захвати" розділу Параметри регулярних виразів. |
|
s |
Використовувати однорядковий режим. |
Приклад див підрозділі "Однорядковий" розділу Параметри регулярних виразів. |
|
x |
Ігнорувати неекрановані прогалини в шаблоні регулярного виразу. |
\ b (? x) \ d + \ s \ w + |
"1 aardvark", "2 cats" in "1 aardvark 2 cats IV centurions" |