Шаблони

Шаблони складаються з рядків і класів символів. У шаблонах можуть міститися підшаблони, тобто шаблони, взяті у круглі дужки.

Символи керування

У шаблонах, так само як і у класах символів, певні символи мають особливе призначення. Для пошуку цих символів не за значенням, а за візуальним представленням, ці символи слід позначити або екранувати, щоб повідомити рушієві пошуку за формальним виразом, що відповідні символи слід шукати за їх візуальним представленням.

Це завдання можна виконати за допомогою додавання перед символом зворотної навскісної риски (\).

Рушій пошуку за формальним виразом без додаткових повідомлень ігноруватиме екрановані символи, які не мають спеціального призначення, отже екранування, наприклад, символу «j» (\j) є безпечним. Якщо ви не пам’ятаєте, чи може символ мати спеціальне призначення, ви можете про всяк випадок його заекранувати.

Екранування, звичайно ж, можна застосовувати і до самого символу зворотної навскісної риски, щоб програма сприймала введену вами зворотну навскісну риску як зворотну навскісну риску, вам слід ввести \\.

Класи символів і абревіатури

Клас символів — це вираз, якому відповідає один символ з вказаного набору символів. У формальних виразах, класи символів визначаються зазначенням дозволених символів класу у квадратних дужках, [], або за допомогою абревіатур класів, які описано нижче.

Прості класи символів містять один або декілька буквених символів, наприклад, [abc] (це означає одну з літер: «a», «b» або «c») або [0123456789] (цей клас визначає одну цифру).

Оскільки для літер і цифр характерний певний порядок (абетка або порядок цифр), ви можете скорочувати запис за допомогою діапазонів: [a-c] рівнозначний до [abc], а [0-9] — до [0123456789]. Можна також використовувати комбінації таких конструкцій, наприклад, [a-fynot1-38] (звичайно ж, остання комбінація відповідає одному з символів «a»,«b»,«c»,«d», «e»,«f»,«y»,«n»,«o»,«t», «1»,«2»,«3» або «8»).

Оскільки великі літери відрізняються від своїх малих еквівалентів, для створення класу символів, у якому б регістр не мав значення, з літер «a» і «b», вам слід записати [aAbB].

Звичайно ж можна створити і «негативний клас», до якого б входили «всі літери окрім вказаних». Для запису такого класу вам слід скористатися символом каретки (^) на початку запису класу:

Набір [^abc] відповідає будь-якому символу, окрім «a», «b» і «c».

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

\a

Цей рядок відповідає символу дзвінка у ASCII (BEL, 0x07).

\f

Цей рядок відповідає символу зміни сторінки у ASCII (FF, 0x0C).

\n

Цей рядок відповідає символу зміни рядка у ASCII (LF, 0x0A, символ нового рядка у Unix).

\r

Цей рядок відповідає символу повернення каретки у ASCII (CR, 0x0D).

\t

Цей рядок відповідає символу горизонтальної табуляції у ASCII (HT, 0x09).

\v

Цей рядок відповідає символу вертикальної табуляції у ASCII (VT, 0x0B).

\xhhhh

Такий рядок відповідає символу Unicode з шістнадцятковим номером hhhh (у межах від 0x0000 до 0xFFFF). \0ooo (тобто \нульo ooo) відповідає символу з ASCII/Latin-1 з вісімковим номером ooo (у межах від 0 до 0377).

. (крапка)

Цей рядок відповідає будь-якому символу (зокрема символу нового рядка).

\d

Цей рядок відповідає будь-якій цифрі. Він рівнозначний до [0-9]

\D

Цей рядок відповідає будь-якому символу, окрім цифри. Він рівнозначний до [^0-9] або [^\d]

\s

Цей рядок відповідає символу проміжку між символами. З практичної точки зору, він рівнозначний до [ \t\n\r]

\S

Цей рядок відповідає символу, який не є пробілом. З практичної точки зору, цей рядок еквівалентний до [^ \t\r\n] або [^\s]

\w

Цей рядок відповідає будь-якому «символу слова» — у нашому випадку, літері, цифрі або символу підкреслювання. Цей рядок еквівалентний до рядка [a-zA-Z0-9_]

\W

Цей рядок відповідає будь-якому символу, який не є символом запису слів, тобто будь-якому символу, який не є літерою, цифрою або символом підкреслювання. Рядок еквівалентний до рядка [^a-zA-Z0-9_] або [^\w]

Передбачено також підтримку позначення класів POSIX[:<назва класу>:]. Наприклад, [:digit:] є тим самим, що і \d, а [:space:] — тим самим, що і \s. Із повним списком класів символів POSIX можна ознайомитися тут.

Класи-скорочення можна використовувати в межах загальних класів, наприклад, щоб знайти літеру слова, символ пробілу або крапку, ви можете скористатися записом [\w \.]

Символи з особливим призначенням у класах символів

Перелічені далі символи мають особливе призначення у конструкціях класів символів «[]», отже для включення їх за візуальним значенням до класу ці символи слід екранувати:

]

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

^ (знак вставки)

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

- (дефіс)

Визначає діапазон. Цей символ завжди слід екранувати, якщо він визначає символ у класі символів.

\ (зворотна навскісна риска)

Символ керівної послідовності. Цей символ завжди слід екранувати, якщо він потрібен вам як символ зворотної навскісної риски.

Варіанти: пошук «одного з»

Якщо вам потрібно знайти один з декількох варіантів шаблонів, ви можете відокремити ці шаблони символом | (вертикальною рискою).

Наприклад, щоб знайти один з рядків, «Іван» або «Юрій», вам слід скористатися виразом Іван|Юрій.

Підшаблони

Підшаблони — це шаблони взяті у круглі дужки, у світі формальних виразів існує декілька способів використання підшаблонів.

Визначення варіантів

Ви можете скористатися підшаблоном, щоб згрупувати набір варіантів у більший шаблон. Варіанти відокремлюються символом «|» (вертикальною рискою).

Наприклад, для того, щоб знайти одне зі слів «int», «float» або «double», ви можете скористатися шаблоном int|float|double. Якщо вам потрібно знайти одне з цих слів, і вам відомо, що за цим словом має йти пробіл, а потім якісь літери, згрупуйте варіанти у підшаблон: (int|float|double)\s+\w+.

Збереження знайденого тексту (зворотні посилання)

Якщо ви хочете скористатися зворотним посиланням, скористайтеся рядком (ШАБЛОН) для запам'ятовування бажаної частини рядка. Щоб запобігти запам'ятовуванню шаблона, скористайтеся групуванням без захоплення вмісту (?:ШАБЛОН).

Наприклад, якщо вам потрібно знайти два однакових слова, відокремлені комою і, можливо, пробільними символами, ви можете скористатися формальним виразом (\w+),\s*\1. За допомогою підшаблону \w+ буде знайдено послідовність символів слів, збіг з формальним виразом буде зареєстровано, якщо за цією послідовністю буде кома, 0 або більше пробільних символів і така сама послідовність символів слів. (Рядок \1 відповідає першому підшаблону, взятому у круглі дужки)

Примітка

Щоб уникнути двозначностей, пов’язаних із використанням \1 з якимись цифрами за ним (наприклад \12 може означати 12 підшаблон або просто перший підшаблон із наступним 2) ми використовуємо синтаксичну конструкцію \{12} для багатоцифрових номерів підшаблонів.

Приклади:

  • \{12}1 — це «використати підшаблон 12»

  • \123 — це «використати підшаблон 1, потім 23 як звичайний текст»

Умовні вирази з перевіркою

Умовний вираз з перевіркою — це підшаблон, що починається з символів ?= або ?!.

Наприклад, для того, щоб знайти рядок «Білл», за яким не буде рядка « Гейтс», можна скористатися таким виразом: Bill(?! Gates). (Таким чином буде знайдено послідовності «Білл Клінтон» і «Біллі Кід», але проігноровано всі інші варіанти.)

Підшаблони, які було використано для перевірки умови, не будуть запам’ятовуватися рушієм пошуку.

Див. також Умовні вирази.

Умовні вирази з перевіркою і пошуком назад

Умовний вираз з перевіркою і пошуком назад — це підшаблон, що починається з символів ?<= або ?<!.

Пошук назад працює так само, як і пошук вперед, але пошук виконується у протилежному напрямку. Наприклад, знайти рядок «команда», але лише якщо перед ним немає рядка «Зе», ви можете скористатися таким виразом: (?<!Зе)команда.

Підшаблони, які було використано для перевірки умови, не будуть запам’ятовуватися рушієм пошуку.

Див. також Умовні вирази

Символи зі спеціальним значення у шаблонах

Перелічені нижче символи мають особливе призначення в межах шаблону, отже, якщо вам потрібно буде знайти ці символи за візуальним представленням, вам слід буде екранувати їх:

\ (зворотна навскісна риска)

Символ керівної послідовності.

^ (знак вставки)

Умовний початок рядка.

$

Умовне завершення рядка.

() (ліва і права круглі дужки)

Визначення підшаблону.

{} (ліва і права фігурні дужки)

Визначення числових лічильників.

[] (ліва і права квадратні дужки)

Визначення класів символів.

| (вертикальна риска)

Логічне АБО. Відокремлює варіанти значення.

+ (знак «плюс»)

Лічильник, 1 або більше.

* (зірочка)

Лічильник, 0 або більше.

? (знак питання)

Необов’язковий символ. Може бути інтерпретовано яка лічильник, 0 або 1.