Назад на головну сторінку

# Регулярні вирази

Ця сторінка містить дуже короткий вступ у регулярні вирази. Він не є вичерпним, оскільки регулярні вирази базово представляють цілу мову патернів знаходження відповідностей. Якщо ви хочете зануритися глибше, то ви можете знайти багато інформації про це в інтернеті; просто шукайте щось, на кшталт 'regular expression tutorial' або 'regular expression introduction'.

## Знаходження відповідностей в усіх файлах Microsoft Excel: `.*\.xlsx?`

У регулярних виразах (часто вживається скорочення "regex"), певні символи мають спеціальне значення. Наприклад, крапка (`'.'`) означає точно один невідомий символ. Тому, ви можете, наприклад, вжити регулярний вираз `h.llo` для пошуку рядків з `hallo` або `hello`, а також `hzllo` чи `h8llo`.

Іншим спеціальним символом є зірочка (`'*'`), яка означає "попередній символ, повторений нуль або більше разів". Тому, якщо ви уведете регулярний вираз `hello*`, то такі рядки будуть йому відповідати: `hell`, `hello`, `helloo`, `hellooo` і так далі.

Як наслідок цих правил, якщо крапка та зірочка будуть поставлені разом, то вони будуть відповідати довільній послідовності символів. Наприклад, регулярний вираз `gen.*ion` може відповідати: `genion`, `generalization`, `generation`, `gentrification` тощо.

Спеціальним символом, подібним до зірочки, є знак питання (`'?'`), який означає "попередній символ, нуль разів або точно один раз". Ви можете також перефразувати його як "попередній символ може або не може бути там". Як і зірочка, він може комбінуватися з крапкою. Звідси, регулярний вираз `hell.?` буде відповідати: `hell`, `hello`, `hells`, `hell4` тощо.

Оскільки такі символи, як крапка та зірочка мають спеціальне значення, якщо ви хочете шукати їх буквально, то ви маєте їх вимикати. Це робиться поставленням перед ними іншого спеціального символа - зворотної косої (`'\'`). Типовим випадком, де зворотна коса потребується для знаходження відповідності, є крапка в імені файлу. Наприклад, для знаходження усіх файлів, ім'я яких містить `license.txt`, ви маєте вжити регулярний вираз `license\.txt` замість просто `license.txt` — останнє буде також відповідати, наприклад, `license-txt`.

Тому, якщо ми покладемо все це разом, ми можемо написати регулярний вираз, що буде шукати відповідності у всіх файлах Microsoft Excel: `.*\.xlsx?`. Цей регулярний вираз базово говорить: довільна послідовність символів, за якою слідує літерна крапка, за якими слідує "xls" з можливим "x" у кінці.

## Знаходження відповідностей послідовності цифр: `journal\d+\.doc`

Припустімо, що ви хочете знайти відповідності в усіх файлах Microsoft Word, що починаються з "journal" та закінчуються часовою міткою, наприклад: "journal2007.doc". Більше того, ви не хочете шукати відповідності в іменах файлів, таких як "journalism.doc".

Регулярний вираз `journal.*\.doc` не підходить для цієї роботи, оскільки він буде знаходити також "journalism.doc". Першим кроком у напрямку рішення є замінити крапку виразом `[0-9]` або `\d`, в обох випадках буде шукатися точно одна цифра. Вираз `[0-9]` є фактично більш загальним зазначенням, ніж `\d`, оскільки ви можете, наприклад, написати `[4-6]` для знаходження цифр лише `4`, `5` та `6`. Він навіть працює для літер: `[m-p]` шукає відповідності усіх рядкових літер від m по p.

А тому, якщо ми скомбінуємо `\d` зі зірочкою, ми можемо записати регулярний вираз `journal\d*\.doc`, який буде відповідати "journal2007.doc", але не "journalism.doc". Але зачекайте, зірочка означає "попередній символ, повторений нуль або більше разів". У цьому випадку, ми не хочемо нуль цифр після "journal", ми хочемо принаймні один — інакше цей регулярний вираз буде також знаходити файл "journal.doc".

Тому, тут є інший спеціальний символ для вас: символ плюс (`'+'`) означає "попередній символ, повторений один або більше разів". Фінальна версія нашого регулярного виразу, звідси, буде: `journal\d+\.doc`