Додаток A. Формальні вирази

Anders Lund

Переклад українською: Юрій Чорноіван
У цьому додатку наведено короткий, але, як сподіваються автори, достатній і інформативний вступ до світу формальних виразів. Тут наведено документацію щодо формальних виразів у тому вигляді, у якому вони використовуються у KatePart, і який не є сумісним ні з формальними виразами у perl, ні з формальними виразами, наприклад, у grep.

Вступ

За допомогою формальних виразів можна описати можливий вміст рядка тексту так, щоб ваш опис був зрозумілим програмі і вона змогла визначати відповідність тексту шуканому рядку, а також, у випадку програм з додатковими можливостями, зберігати знайдені фрагменти для наступного використання.

Приклад: припустімо, вам потрібно знайти у тексті абзаци, які починаються зі слів «Іван» або «Франко», за якими слідує одна з форм дієслова «говорити».

Якщо б ви виконували пошук у звичайний спосіб, ви мали б почати з пошуку імені, «Іван», можливо у супроводі «говори», десь так: Іван говори, серед відповідників вам слід би було відкинути ті, які стоять не на початку абзацу, а також ті, у яких літери «говори» не є літерами слів «говорить», «говорив» тощо. Потім, звичайно ж, вам слід було б повторити пошук для прізвища...

За допомогою формальних виразів завдання з пошуку виконується в одну дію і з вищим рівнем точності.

Щоб досягти цього, за допомогою формальних виразів визначаються правила, за допомогою яких створюється узагальнена форма рядка пошуку. У нашому прикладі це правило можна висловити буквально так: «Рядок, який починається з Іван або Франко (перед цим словом може бути до 4 пробілів або символів табуляції), продовжується пробілом, за яким йде слово говори, яке закінчується на ть або в». Все це визначає формальний вираз:

^[ \t]{0,4}(Іван|Франко) говори(ть|в)

У наведеному вище прикладі продемонстровано всі чотири компоненти сучасних формальних виразів, а саме:

  • Шаблони

  • Умовні вирази

  • Лічильники

  • Зворотні посилання

Символ каретки (^) на початку виразу є умовним виразом, який визначає, що наступний рядок має розпочинати рядок у тексті.

Рядки [ \t] і (Іван|Франко) говори(ть|в) є шаблонами. Перший з них визначає клас символів, до якого належить пробіл або символ горизонтальної табуляції; у другому шаблоні міститься спочатку підшаблон, який визначає рядок Іван або Франко, потім рядка говори і нарешті підшаблону, що визначає закінчення: ть або ив

Рядок {0,4} є лічильником, який повідомляє інструментові пошуку, що рядок знаходиться «будь-де, за від 0 до 4 рядками, вказаними раніше».

Програмне забезпечення, яке працює з формальними виразами, підтримує концепцію зворотних посилань, використання цієї концепції надає змогу зберегти повністю знайдену частину рядка або підрядки, позначені круглими дужками, а потім у певний спосіб використати ці посилання. Отже, ми можемо повністю позбутися ручної роботи з пошуку рядка (під час пошуку за допомогою формального виразу у текстовому документі, відкритому у редакторі, цей рядок буде позначено як виділений), пошуку імені або навіть фраз з різними закінченнями у дієслів.

Разом, формальний вираз визначає саме той рядок, який ми бажали знайти, і лише у потрібному місці тексту.

У наступних розділах буде докладно описано побудову і використання шаблонів, класів символів, умовних виразів, лічильників і зворотних посилань. Нарешті у останньому розділі ви знайдете декілька корисних прикладів.