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

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

Ця сторінка містить дуже короткий вступ у регулярні вирази. Він не є вичерпним, оскільки регулярні вирази базово представляють цілу мову патернів знаходження відповідностей. Якщо ви хочете зануритися глибше, то ви можете знайти багато інформації про це в інтернеті; просто шукайте щось, на кшталт '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