
Зміст
У цьому додатку наведено короткий, але, як сподіваються автори, достатній і інформативний вступ до світу формальних виразів. Тут наведено документацію щодо формальних виразів у тому вигляді, у якому вони використовуються у KatePart, і який не є сумісним ні з формальними виразами у perl, ні з формальними виразами, наприклад, у grep.
За допомогою формальних виразів можна описати можливий вміст рядка тексту так, щоб ваш опис був зрозумілим програмі і вона змогла визначати відповідність тексту шуканому рядку, а також, у випадку програм з додатковими можливостями, зберігати знайдені фрагменти для наступного використання.
Приклад: припустімо, вам потрібно знайти у тексті абзаци, які починаються зі слів «Іван» або «Франко», за якими слідує одна з форм дієслова «говорити».
Якщо б ви виконували пошук у звичайний спосіб, ви мали б почати з пошуку імені, «Іван», можливо у супроводі «говори», десь так: Іван говори
, серед відповідників вам слід би було відкинути ті, які стоять не на початку абзацу, а також ті, у яких літери «говори» не є літерами слів «говорить», «говорив» тощо. Потім, звичайно ж, вам слід було б повторити пошук для прізвища...
За допомогою формальних виразів завдання з пошуку виконується в одну дію і з вищим рівнем точності.
Щоб досягти цього, за допомогою формальних виразів визначаються правила, за допомогою яких створюється узагальнена форма рядка пошуку. У нашому прикладі це правило можна висловити буквально так: «Рядок, який починається з „Іван“ або „Франко“ (перед цим словом може бути до 4 пробілів або символів табуляції), продовжується пробілом, за яким йде слово „говори“, яке закінчується на „ть“ або „в“». Все це визначає формальний вираз:
^[ \t]{0,4}(Іван|Франко) говори(ть|в)
У наведеному вище прикладі продемонстровано всі чотири компоненти сучасних формальних виразів, а саме:
Шаблони
Умовні вирази
Лічильники
Зворотні посилання
Символ каретки (^
) на початку виразу є умовним виразом, який визначає, що наступний рядок має розпочинати рядок у тексті.
Рядки [ \t]
і (Іван|Франко) говори(ть|в)
є шаблонами. Перший з них визначає клас символів, до якого належить пробіл або символ горизонтальної табуляції; у другому шаблоні міститься спочатку підшаблон, який визначає рядок Іван
або Франко
, потім рядка говори
і нарешті підшаблону, що визначає закінчення: ть
або ив
Рядок {0,4}
є лічильником, який повідомляє інструментові пошуку, що рядок знаходиться «будь-де, за від 0 до 4 рядками, вказаними раніше».
Програмне забезпечення, яке працює з формальними виразами, підтримує концепцію зворотних посилань, використання цієї концепції надає змогу зберегти повністю знайдену частину рядка або підрядки, позначені круглими дужками, а потім у певний спосіб використати ці посилання. Отже, ми можемо повністю позбутися ручної роботи з пошуку рядка (під час пошуку за допомогою формального виразу у текстовому документі, відкритому у редакторі, цей рядок буде позначено як виділений), пошуку імені або навіть фраз з різними закінченнями у дієслів.
Разом, формальний вираз визначає саме той рядок, який ми бажали знайти, і лише у потрібному місці тексту.
У наступних розділах буде докладно описано побудову і використання шаблонів, класів символів, умовних виразів, лічильників і зворотних посилань. Нарешті у останньому розділі ви знайдете декілька корисних прикладів.