В програмуванні, регулярний вираз (від англ. regular expression, скорочено regex або regexp, а іноді ще й називають rational expression) — це рядок, що описує або збігається з множиною рядків, відповідно до набору спеціальних синтаксичних правил. Вони використовуються в багатьох текстових редакторах та допоміжних інструментах для пошуку та зміни тексту на основі заданих шаблонів. Багато мов програмування підтримують регулярні вирази для роботи з рядками. Наприклад, Perl та Tcl мають потужний механізм для роботи, вбудований безпосередньо в їхній синтаксис. Завдяки набору утиліт (разом з редактором sed та фільтром grep), що входили до складу дистрибутивів UNIX, регулярні вирази стали відомими та поширеними.
Базові принципи
Регулярні вирази базуються на теорії автоматів та . Ці розділи теоретичної кібернетики займаються дослідженням моделей обчислення (автомати) та способами описання та класифікації формальних мов.
Регулярний вираз (часто називається шаблон) є послідовністю, що описує множину рядків. Ці послідовності використовують для точного описання множини без переліку всіх її елементів. Наприклад, множина, що складається із слів «грати» та «ґрати», може бути описана регулярним виразом «[гґ]рати». В більшості формалізмів, якщо існує регулярний вираз, що описує задану множину, тоді існує нескінченна кількість варіантів, які описують цю множину[].
Синтаксис
Синтаксис регулярних виразів залежить від інтерпретатора, що використовується для їхньої обробки. Однак, із незначними відхиленнями, майже всі поширені інтерпретатори регулярних виразів мають спільні правила.
Представлення символів
Звичайні символи (літерали) і спеціальні символи ()
Найпростішим регулярним виразом, з якого формуються складні, є звичайний символ.
Більшість символів у регулярному виразі представляють самі себе, за винятком спеціальних символів (метасимволів) [
]
\
^
$
.
|
?
*
+
(
)
{
}
, яким може передувати символ \
(зворотна коса риска), котрий робить метасимволи «екранованими», «захищеними» для представлення, відображення їх самих як символів тексту. Можна екранувати деяку послідовність символів, розмістивши її між \Q
і \E
.
Приклад | Відповідність |
---|---|
a\.? | a. або a |
a\\\\b | a\\b |
a\[F\] | a[F] |
\Q+-*/\E | +-*/ |
Аналогічно можуть бути представлені інші спеціальні символи (набір символів, що вимагають екранування, може відрізнятися залежно від конкретної реалізації). Частина символів, які в тій або іншій реалізації не вимагають екранування (наприклад, кутові дужки <
>
), можуть бути екрановані з міркувань зручності читання.
Залежно від інтерпретатора регулярних виразів, метасимволи «?», «+», «{», «|», «(», та «)» можуть втрачати своє спеціальне значення, замість цього слід вживати «\?», «\+», «\{», «\|», «\(», та «\)».
Будь-який символ
Метасимволу .
(крапка) відповідає довільний символ, окрім символу нового рядка (в деяких реалізаціях).
Символьні класи (набори символів)
Набір символів у квадратних дужках [
]
називається символьним класом і дозволяє вказати інтерпретаторові регулярних виразів, що на даному місці в рядку може стояти один із перерахованих символів.
Зокрема, [абв]
задає можливість появи в тексті одного із трьох зазначених символів, а [1234567890]
задає відповідність одній із цифр. Можливе зазначення діапазонів символів: наприклад, [0-9]
.
Для включення усіх символів українського алфавіту можна використовувати [Є-ЯҐ]
, [а-їґ]
.
Якщо потрібно вказати символи, які не входять у зазначений набір, то використовують символ ^
усередині квадратних дужок, наприклад, [^0-9]
означає будь-який символ, крім цифр.
Додавання в набір спеціальних символів шляхом екранування символом «\» — найпростіший спосіб. Однак сучасні регулярні вирази успадковують також і традиційний підхід — див. Традиційні регулярні вирази.
Деякі символьні класи можна замінити спеціальними метасимволами:
Символ | Опис |
---|---|
\d | Відповідає цифрі. Еквівалентно [0-9] |
\D | Відповідає нецифровому символу. Еквівалентно [^0-9] |
\s | Відповідає будь-якому пробільному символу. Еквівалентно [ \f\n\r\t\v] |
\S | Відповідає будь-якому непробільному символу. Еквівалентно [^ \f\n\r\t\v] |
\w | Відповідає будь-якому літерному символу, цифровому й знаку підкреслення. Еквівалентно [[:word:]] |
\W | Відповідає будь-якому символу, крім літерного символу, цифрового або підкреслення. Еквівалентно [^[:word:]] |
Позиція всередині рядка
Наступні символи дозволяють позиціонувати регулярний вираз щодо елементів тексту: початку й кінця рядка, меж слова.
Представлення | Позиція | Приклад | Відповідність |
---|---|---|---|
^ | Початок рядка | ^a | aaa aaa |
$ | Кінець рядка | a$ | aaa aaa |
\b | Межа слова | a\b | aaa aaa |
\ba | aaa aaa | ||
\B | Не межа слова | \Ba\B | aaa aaa |
\G | Попередній успішний пошук | \Ga | aaa aaa (пошук зупинився на 4-й позиції — там, де не знайшлося a ) |
Квантифікація (пошук послідовностей)
після символу, символьного класу або групи визначає, скільки разів попередній вираз може зустрічатися. Варто враховувати, що квантифікатор може стосуватися більш ніж до одного символу в регулярному виразі, тільки якщо це символьний клас або група.
Представлення | Кількість повторень | Приклад | Відповідність |
---|---|---|---|
{n} | Рівно n разів | colou{3}r | colouuur |
{m,n} | Від m до n включно | colou{2,4}r | colouur , colouuur , colouuuur |
{m,} | Не менше m | colou{2,}r | colouur , colouuur , colouuuur і т.д. |
{,n} | Не більше n | colou{,3}r | color , colour , colouur , colouuur |
Представлення | Кількість повторень | Еквівалент | Приклад | Відповідність |
---|---|---|---|---|
* | Нуль або більше | {0,} | colou*r | color , colour , colouur і т.д. |
+ | Одне або більше | {1,} | colou+r | colour , colouur і т.д. (але не color ) |
? | Нуль або одне | {0,1} | colou?r | color , colour |
Часто використовується послідовність .*
для позначення будь-якої кількості будь-яких символів між двома частинами регулярного виразу.
Символьні класи в поєднанні із квантифікаторами дозволяють установлювати відповідності з реальними текстами. Наприклад, колонками цифр, телефонами, поштовими адресами, елементами HTML-розмітки й ін.
Якщо символи {
}
не утворюють квантифікатор, їхнє спеціальне значення ігнорується.
Жадібна й ледача квантифікація
Вираз (<.*>)
відповідає рядку, що містить декілька тегів HTML-розмітки, цілком.
<p><b>Вікіпедія</b> - вільна енциклопедія, у якій <i>кожен</i> може змінити або доповнити будь-яку статтю</p>.
Щоб виділити окремі теги, можна застосувати ледачу версію цього виразу: (<.*?>)
Їй відповідає не весь показаний вище рядок, а окремі теги (виділені кольором):
<p><b>Вікіпедія</b> - вільна енциклопедія, у якій <i>кожен</i> може змінити або доповнити будь-яку статтю</p>.
У деяких реалізаціях квантифікаторам у регулярних виразах відповідає максимально довгий рядок із можливих (квантифікатори є жадібними, англ. greedy). Це може стати значною проблемою. Наприклад, часто очікують, що вираз (<.*>)
знайде в тексті теги HTML. Однак, якщо в тексті є більше одного HTML-тегу, то цьому виразу відповідає цілком рядок, що містить множину тегів.
<p><b>Вікіпедія</b> - вільна енциклопедія, у якій <i>кожен</i> може змінити або доповнити будь-яку статтю</p>.
Цю проблему можна вирішити двома способами.
- Ураховувати символи, що не відповідають бажаному взірцю (
<[^>]*>
для вищеописаного випадку). - Визначити квантифікатор як нежадібний (ледачий, англ. lazy) — більшість реалізацій дозволяють це зробити, додавши після нього знак питання.
Використання ледачих квантифікаторів може викликати зворотну проблему, коли виразу відповідає занадто короткий, зокрема, порожній рядок.
Жадібний | Ледачий |
---|---|
* | *? |
+ | +? |
{n,} | {n,}? |
Також спільною проблемою як жадібних, так і ледачих виразів є точки повернення для перебору варіантів виразу. Точки ставляться після кожної ітерації квантифікатора. Якщо інтерпретатор не знайшов відповідності після квантифікатора, то він починає повертатися за всіма встановленими точками, перераховуючи звідти вираз по-іншому.
Ревнива квантифікація (Найжадібніша)
При пошуку виразу (a+a+)+b
у рядку aaaaa
інтерпретатор піде приблизно таким шляхом:
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
— і тільки тут, перевіривши всі точки повернення, здасться.
При використанні ревнивого квантифікатора буде виконаний тільки перший крок алгоритму.
На відміну від звичайної (жадібної) квантифікації, ревнива квантифікація не тільки намагається знайти максимально довгий варіант, але ще й не дозволяє алгоритму вертатися до попередніх кроків пошуку для того, щоб знайти можливі відповідності для частини регулярного виразу, що залишилася.
Використання ревнивих квантифікаторів збільшує швидкість пошуку, особливо в тих випадках, коли рядок не відповідає регулярному виразу. Крім того, ревниві квантифікатори можуть бути використані для виключення небажаних збігів.
Жадібний | Ревнивий |
---|---|
* | *+ |
? | ?+ |
+ | ++ |
{n,} | {n,}+ |
Приклад | Відповідність |
---|---|
ab(xa)*+a | abxaabxaa ; але не abxaabxaa , тому що літера a уже зайнята |
Групування
Позначення групи
Круглі дужки використовуються для визначення області дії й пріоритету операцій. Шаблон усередині групи обробляється як єдине ціле й може бути квантифікованим. Наприклад, вираз (тр[ау] м-?)*
знайде послідовність виду трумтрам-трум-трамтрум
.
Одне із застосувань групування — повторне використання раніше знайдених груп символів (підрядків, блоків, позначених підвиразів). При обробці виразу підрядки, що знайдені за шаблоном усередині групи, зберігаються в окремій області пам'яті й отримують номер, починаючи з одиниці. Кожному підрядку відповідає пара дужок у регулярному виразі. Квантифікація групи не впливає на збережений результат, тобто зберігається лише перше входження. Зазвичай підтримується до 9 нумерованих підрядків із номерами від 1 до 9, але деякі інтерпретатори дозволяють працювати з більшою кількістю. Згодом у межах даного регулярного виразу можна використати позначення від \1
до \9
для перевірки на збіг із раніше знайденим підрядком.
Наприклад, регулярний вираз (та|ту)-\1
знайде рядок та-та
або ту-ту
, але пропустить рядок та-ту
.
Також раніше знайдені підрядки можна використовувати при заміні за регулярним виразом. У такому разі в текст, що заміщає, вставляються ті ж позначення, що й у межах самого виразу.
Групування без зворотного зв'язку
Якщо група використовується тільки для групування і її результат надалі не буде потрібен, то можна використати групування виду (?:шаблон)
. Під результат такого групування не виділяється окрема область пам'яті й, відповідно, їй не призначається номер. Це позитивно впливає на швидкість виконання виразу, але знижує зручність читання.
Атомарне групування
Атомарне групування (виду (?>шаблон)
), так само як групування без зворотного зв'язку, не створює зворотних зв'язків. На відміну від нього, таке групування забороняє вертатися назад по рядку, якщо частина шаблону вже знайдена.
Приклад | Відповідність | Створювані групи |
---|---|---|
a(bc|b|x)cc | abccaxcc
| abccaxcc
|
a(?:bc|b|x)cc | немає | |
a(?>bc|b|x)cc | abccaxcc але не | |
a(?>x*)xa | не знайдеться axxxa : усі x зайняті, і немає повернення всередину групи |
Атомарне групування виконується ще швидше, ніж групування без зворотного зв'язку, і зберігає процесорний час при виконанні решти виразу, тому що забороняє перевірку будь-яких інших варіантів усередині групи, коли один варіант уже знайдений. Це дуже корисно при оптимізації груп із множиною різних варіантів.
Модифікатори
Модифікатори діють із моменту входження й до кінця регулярного виразу або протилежного модифікатора. Деякі інтерпретатори можуть застосувати модифікатор до всього виразу, а не з моменту його входження.
Синтаксис | Опис | |
---|---|---|
(?i) | Включає | нечутливість виразу до регістра символів (англ. case insensitivity) |
(?-i) | Виключає | |
(?s) | Включає | режим відповідності точки символам переносу рядка й повернення каретки |
(?-s) | Виключає | |
(?m) | Символи ^ і $ викликають відповідність тільки | після й до символів нового рядка |
(?-m) | із початком і кінцем рядка | |
(?x) | Включає | режим без урахування пробілів між частинами регулярного виразу й дозволяє використовувати # для коментарів |
(?-x) | Виключає |
Групи-модифікатори можна об'єднувати в одну групу: (?i-sm)
. Така група включає режим i
і виключає режим s
, m
. Якщо використання модифікаторів потрібне тільки в межах групи, то потрібний шаблон вказується всередині групи після модифікаторів і двокрапки. Наприклад, (?-i)(?i:tv)set
знайде TVset
, але не TVSET
.
Коментарі
Для додавання коментарів у регулярний вираз можна використовувати групи-коментарі виду (?#коментар)
. Така група інтерпретатором цілком ігнорується й не перевіряється на входження в текст. Наприклад, вираз А(?#тут коментар)Б
відповідає рядку АБ
.
Перерахування
Вертикальна риса розділяє допустимі варіанти. Наприклад, gray|grey
відповідає gray
або grey
. Варто пам'ятати, що перебір варіантів виконується зліва праворуч, як вони вказані.
Якщо потрібно вказати перелік варіантів усередині складнішого регулярного виразу, то його потрібно взяти в групу. Наприклад, gray|grey
або gr(a|e)y
описують рядок gray
або grey
. У разі односимвольних альтернатив кращий варіант gr[ae]y
, тому що порівняння із символьним класом виконується простіше, ніж обробка групи з перевіркою на всі її можливі модифікатори й генерацією зворотного зв'язку.
Перегляд уперед та назад
У більшості реалізацій регулярних виразів є спосіб провадити пошук фрагмента тексту, «переглядаючи» (але не включаючи в знайдене) навколишній текст, що розташований до або після шуканого фрагмента тексту. Наприклад, таким способом легко знайти ім'я тегу HTML, не включаючи в результат пошуку оточуючі його кутові дужки або інші знаки, але й, не упускаючи їх «з уваги» при пошуку потрібного контексту. Перегляд із запереченням використовується рідше й «стежить» за тим, щоб указані відповідності, навпаки, не зустрічалися до або після шуканого текстового фрагмента.
Представлення | Вид перегляду | Приклад регулярного виразу | Відповідність |
---|---|---|---|
(?=шаблон) | Позитивний перегляд уперед | Людовик(?=XVI) | ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL |
(?!шаблон) | Негативний перегляд уперед (із запереченням) | Людовик(?!XVI) | ЛюдовикXV, ЛюдовикXVI, ЛюдовикXVIII, ЛюдовикLXVII, ЛюдовикXXL |
(?<=шаблон) | Позитивний перегляд назад | (?<=Сергій )Іванів | Сергій Іванів, Ігор Іванів |
(?<!шаблон) | Негативний перегляд назад (із запереченням) | (?<!Сергій )Іванів | Сергій Іванів, Ігор Іванів |
Пошук за умовою
У багатьох реалізаціях регулярних виразів існує можливість вибирати, яким шляхом піде перевірка в тому або іншому місці регулярного виразу на підставі вже знайдених значень.
Представлення | Пояснення | Приклад | Відповідність |
---|---|---|---|
(?(?=якщо)то|інакше) | Якщо операція перегляду успішна, то далі виконується частина то , інакше виконується частина інакше . У виразі може використовуватися кожна із чотирьох операцій перегляду. Варто враховувати, що операція перегляду нульової ширини, тому частини то у разі позитивного або інакше у разі негативного перегляду повинні містити в собі опис шаблону з операції перегляду. | (?(?<=а)м|п) | мам,пап |
(?(n)то|інакше) | Якщо n-а група повернула значення, то пошук за умовою виконується за шаблоном то , інакше за шаблоном інакше . | (а)?(?(1)м|п) | мам,пап |
Різне
Два регулярних вирази можна об'єднати. У цьому разі отриманий складний вираз буде рядком, що є об'єднанням двох рядків, які відповідають цим простим виразам.
Два регулярних вирази можна з'єднати інфіксним оператором «|»; у цьому разі складний вираз буде відповідатиме рядкам, що відповідають або першому, або другому простому регулярному виразу.
Оператори повтору мають більший пріоритет, ніж оператор об'єднання, а останній у свою чергу має більший пріоритет, ніж оператор альтернативи. Ці правила пріоритету можна змінити за допомогою круглих дужок.
Приклади
Наведемо декілька словесних прикладів регулярних виразів: «три цифри» (такому шаблону відповідають рядки «121», «424», але не «23абв»), «дві цифри, після яких стоїть крапка, за якою йдуть кілька цифр, проте не менше однієї» (цьому шаблону відповідають «11.2», «11.4а», але не «11. »). Регулярні вирази подібні до арифметичних у тому, що формуються з менших за допомогою операторів.
Заголовки розділів Вікіпедії
Відповідно до , назви розділів починаються з декількох знаків «дорівнює» на початку рядка. Наступний регулярний вираз для GNU Emacs відповідає таким заголовкам:
\(^==+\).*\1
Див. також
- Представлення символів у регулярних виразах
- sed — джерела регулярних виразів
- Perl — поширена мова програмування, регулярні вирази включено до синтаксису.
- Регулярні події та вирази — теоретичні відомості про вирази регулярними мовами.
- Регулярна множина
- Алгоритм Ерлі
- Висота ітерації мови
- Зіставляння зі взірцем
Примітки
- Ruslan Mitkov (2003). The Oxford Handbook of Computational Linguistics. Oxford University Press. с. 754. ISBN .
- Mark V. Lawson (17 вересня 2003). Finite Automata. CRC Press. с. 98—100. ISBN .
- Для зручного використання послідовностей літер у деяких мовах необхідно встановити кодову сторінку, у якій ці послідовності будуть іти в порядку від і до зазначених символів. У Юнікоді деякі літери українського алфавіту знаходяться за межами діапазонів А-Я та а-я. [1]
Посилання
- Regular-Expressions.info(англ.) Інструменти для роботи з регулярними виразами, приклади та довідники.
- DMOZ: Перелік посилань на ресурси про регулярні вирази(англ.)
- Інтерактивний редактор regexp'ів
- , docs.linux.org.ua, 24 січня 2007.
Література
- Гаврилків В. М. Формальні мови та алгоритмічні моделі. — І.-Ф. : Сімик, 2012. — 172 с. оригіналу. (укр.)
- Гаврилків В. М. Регулярні вирази у програмних продуктах. — І.-Ф. : Голіней, 2012. — 72 с. (укр.)
Це незавершена стаття про мови програмування. Ви можете проєкту, виправивши або дописавши її. |
Це незавершена стаття про алгоритми. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
V programuvanni regulyarnij viraz vid angl regular expression skorocheno regex abo regexp a inodi she j nazivayut rational expression ce ryadok sho opisuye abo zbigayetsya z mnozhinoyu ryadkiv vidpovidno do naboru specialnih sintaksichnih pravil Voni vikoristovuyutsya v bagatoh tekstovih redaktorah ta dopomizhnih instrumentah dlya poshuku ta zmini tekstu na osnovi zadanih shabloniv Bagato mov programuvannya pidtrimuyut regulyarni virazi dlya roboti z ryadkami Napriklad Perl ta Tcl mayut potuzhnij mehanizm dlya roboti vbudovanij bezposeredno v yihnij sintaksis Zavdyaki naboru utilit razom z redaktorom sed ta filtrom grep sho vhodili do skladu distributiviv UNIX regulyarni virazi stali vidomimi ta poshirenimi Bazovi principiDokladnishe Regulyarna mova ta Regulyarna gramatika Regulyarni virazi bazuyutsya na teoriyi avtomativ ta Ci rozdili teoretichnoyi kibernetiki zajmayutsya doslidzhennyam modelej obchislennya avtomati ta sposobami opisannya ta klasifikaciyi formalnih mov Regulyarnij viraz chasto nazivayetsya shablon ye poslidovnistyu sho opisuye mnozhinu ryadkiv Ci poslidovnosti vikoristovuyut dlya tochnogo opisannya mnozhini bez pereliku vsih yiyi elementiv Napriklad mnozhina sho skladayetsya iz sliv grati ta grati mozhe buti opisana regulyarnim virazom gg rati V bilshosti formalizmiv yaksho isnuye regulyarnij viraz sho opisuye zadanu mnozhinu todi isnuye neskinchenna kilkist variantiv yaki opisuyut cyu mnozhinu dzherelo SintaksisSintaksis regulyarnih viraziv zalezhit vid interpretatora sho vikoristovuyetsya dlya yihnoyi obrobki Odnak iz neznachnimi vidhilennyami majzhe vsi poshireni interpretatori regulyarnih viraziv mayut spilni pravila Predstavlennya simvoliv Dokladnishe Predstavlennya simvoliv u regulyarnih virazah Zvichajni simvoli literali i specialni simvoli Najprostishim regulyarnim virazom z yakogo formuyutsya skladni ye zvichajnij simvol Bilshist simvoliv u regulyarnomu virazi predstavlyayut sami sebe za vinyatkom specialnih simvoliv metasimvoliv yakim mozhe pereduvati simvol zvorotna kosa riska kotrij robit metasimvoli ekranovanimi zahishenimi dlya predstavlennya vidobrazhennya yih samih yak simvoliv tekstu Mozhna ekranuvati deyaku poslidovnist simvoliv rozmistivshi yiyi mizh Q i E Priklad Vidpovidnista a abo aa b a ba F a F Q E Analogichno mozhut buti predstavleni inshi specialni simvoli nabir simvoliv sho vimagayut ekranuvannya mozhe vidriznyatisya zalezhno vid konkretnoyi realizaciyi Chastina simvoliv yaki v tij abo inshij realizaciyi ne vimagayut ekranuvannya napriklad kutovi duzhki lt gt mozhut buti ekranovani z mirkuvan zruchnosti chitannya Zalezhno vid interpretatora regulyarnih viraziv metasimvoli ta mozhut vtrachati svoye specialne znachennya zamist cogo slid vzhivati ta Bud yakij simvol Metasimvolu krapka vidpovidaye dovilnij simvol okrim simvolu novogo ryadka v deyakih realizaciyah Simvolni klasi nabori simvoliv Nabir simvoliv u kvadratnih duzhkah nazivayetsya simvolnim klasom i dozvolyaye vkazati interpretatorovi regulyarnih viraziv sho na danomu misci v ryadku mozhe stoyati odin iz pererahovanih simvoliv Zokrema abv zadaye mozhlivist poyavi v teksti odnogo iz troh zaznachenih simvoliv a 1234567890 zadaye vidpovidnist odnij iz cifr Mozhlive zaznachennya diapazoniv simvoliv napriklad 0 9 Dlya vklyuchennya usih simvoliv ukrayinskogo alfavitu mozhna vikoristovuvati Ye YaG a yig Yaksho potribno vkazati simvoli yaki ne vhodyat u zaznachenij nabir to vikoristovuyut simvol useredini kvadratnih duzhok napriklad 0 9 oznachaye bud yakij simvol krim cifr Dodavannya v nabir specialnih simvoliv shlyahom ekranuvannya simvolom najprostishij sposib Odnak suchasni regulyarni virazi uspadkovuyut takozh i tradicijnij pidhid div Tradicijni regulyarni virazi Deyaki simvolni klasi mozhna zaminiti specialnimi metasimvolami Simvol Opis d Vidpovidaye cifri Ekvivalentno 0 9 D Vidpovidaye necifrovomu simvolu Ekvivalentno 0 9 s Vidpovidaye bud yakomu probilnomu simvolu Ekvivalentno f n r t v S Vidpovidaye bud yakomu neprobilnomu simvolu Ekvivalentno f n r t v w Vidpovidaye bud yakomu liternomu simvolu cifrovomu j znaku pidkreslennya Ekvivalentno word W Vidpovidaye bud yakomu simvolu krim liternogo simvolu cifrovogo abo pidkreslennya Ekvivalentno word Poziciya vseredini ryadka Nastupni simvoli dozvolyayut pozicionuvati regulyarnij viraz shodo elementiv tekstu pochatku j kincya ryadka mezh slova Predstavlennya Poziciya Priklad Vidpovidnist Pochatok ryadka a span style background color 999999 color FFFFFF a span aa aaa Kinec ryadka a aaa aa span style background color 999999 color FFFFFF a span b Mezha slova a b aa span style background color 999999 color FFFFFF a span aa span style background color 999999 color FFFFFF a span ba span style background color 999999 color FFFFFF a span aa span style background color 999999 color FFFFFF a span aa B Ne mezha slova Ba B a span style background color 999999 color FFFFFF a span a a span style background color 999999 color FFFFFF a span a G Poperednij uspishnij poshuk Ga span style background color 999999 color FFFFFF aaa span aaa poshuk zupinivsya na 4 j poziciyi tam de ne znajshlosya a Kvantifikaciya poshuk poslidovnostej pislya simvolu simvolnogo klasu abo grupi viznachaye skilki raziv poperednij viraz mozhe zustrichatisya Varto vrahovuvati sho kvantifikator mozhe stosuvatisya bilsh nizh do odnogo simvolu v regulyarnomu virazi tilki yaksho ce simvolnij klas abo grupa Predstavlennya Kilkist povtoren Priklad Vidpovidnist i n i Rivno n raziv colou 3 r colouuur i m i i n i Vid m do n vklyuchno colou 2 4 r colouur colouuur colouuuur i m i Ne menshe m colou 2 r colouur colouuur colouuuur i t d i n i Ne bilshe n colou 3 r color colour colouur colouuurPredstavlennya Kilkist povtoren Ekvivalent Priklad Vidpovidnist Nul abo bilshe 0 colou r color colour colouur i t d Odne abo bilshe 1 colou r colour colouur i t d ale ne color Nul abo odne 0 1 colou r color colour Chasto vikoristovuyetsya poslidovnist dlya poznachennya bud yakoyi kilkosti bud yakih simvoliv mizh dvoma chastinami regulyarnogo virazu Simvolni klasi v poyednanni iz kvantifikatorami dozvolyayut ustanovlyuvati vidpovidnosti z realnimi tekstami Napriklad kolonkami cifr telefonami poshtovimi adresami elementami HTML rozmitki j in Yaksho simvoli ne utvoryuyut kvantifikator yihnye specialne znachennya ignoruyetsya Zhadibna j ledacha kvantifikaciya Priklad vikoristannya zhadibnih i ledachih viraziv Viraz lt gt vidpovidaye ryadku sho mistit dekilka tegiv HTML rozmitki cilkom span style background color 999999 color FFFFFF lt p gt lt b gt Vikipediya lt b gt vilna enciklopediya u yakij lt i gt kozhen lt i gt mozhe zminiti abo dopovniti bud yaku stattyu lt p gt span Shob vidiliti okremi tegi mozhna zastosuvati ledachu versiyu cogo virazu lt gt Yij vidpovidaye ne ves pokazanij vishe ryadok a okremi tegi vidileni kolorom span style background color 999999 color FFFFFF lt p gt lt b gt span Vikipediya span style background color 999999 color FFFFFF lt b gt span vilna enciklopediya u yakij span style background color 999999 color FFFFFF lt i gt span kozhen span style background color 999999 color FFFFFF lt i gt span mozhe zminiti abo dopovniti bud yaku stattyu span style background color 999999 color FFFFFF lt p gt span U deyakih realizaciyah kvantifikatoram u regulyarnih virazah vidpovidaye maksimalno dovgij ryadok iz mozhlivih kvantifikatori ye zhadibnimi angl greedy Ce mozhe stati znachnoyu problemoyu Napriklad chasto ochikuyut sho viraz lt gt znajde v teksti tegi HTML Odnak yaksho v teksti ye bilshe odnogo HTML tegu to comu virazu vidpovidaye cilkom ryadok sho mistit mnozhinu tegiv span style background color 999999 color FFFFFF lt p gt lt b gt Vikipediya lt b gt vilna enciklopediya u yakij lt i gt kozhen lt i gt mozhe zminiti abo dopovniti bud yaku stattyu lt p gt span Cyu problemu mozhna virishiti dvoma sposobami Urahovuvati simvoli sho ne vidpovidayut bazhanomu vzircyu lt gt gt dlya visheopisanogo vipadku Viznachiti kvantifikator yak nezhadibnij ledachij angl lazy bilshist realizacij dozvolyayut ce zrobiti dodavshi pislya nogo znak pitannya Vikoristannya ledachih kvantifikatoriv mozhe viklikati zvorotnu problemu koli virazu vidpovidaye zanadto korotkij zokrema porozhnij ryadok Zhadibnij Ledachij i n i i n i Takozh spilnoyu problemoyu yak zhadibnih tak i ledachih viraziv ye tochki povernennya dlya pereboru variantiv virazu Tochki stavlyatsya pislya kozhnoyi iteraciyi kvantifikatora Yaksho interpretator ne znajshov vidpovidnosti pislya kvantifikatora to vin pochinaye povertatisya za vsima vstanovlenimi tochkami pererahovuyuchi zvidti viraz po inshomu Revniva kvantifikaciya Najzhadibnisha Pri poshuku virazu span style color red a span span style color green a span span style color magenta b span u ryadku aaaaa interpretator pide priblizno takim shlyahom span style color red aaaaa span span style color red aaaa span span style color green a span span style color red aaa span span style color green a span span style color magenta a span span style color red aa span span style color green aaa span span style color red aa span span style color green aa span span style color magenta a span span style color red aa span span style color green a span span style color red a span span style color green a span span style color red a span span style color green a span span style color red a span span style color green a span span style color magenta a span i tilki tut perevirivshi vsi tochki povernennya zdastsya Pri vikoristanni revnivogo kvantifikatora bude vikonanij tilki pershij krok algoritmu Na vidminu vid zvichajnoyi zhadibnoyi kvantifikaciyi revniva kvantifikaciya ne tilki namagayetsya znajti maksimalno dovgij variant ale she j ne dozvolyaye algoritmu vertatisya do poperednih krokiv poshuku dlya togo shob znajti mozhlivi vidpovidnosti dlya chastini regulyarnogo virazu sho zalishilasya Vikoristannya revnivih kvantifikatoriv zbilshuye shvidkist poshuku osoblivo v tih vipadkah koli ryadok ne vidpovidaye regulyarnomu virazu Krim togo revnivi kvantifikatori mozhut buti vikoristani dlya viklyuchennya nebazhanih zbigiv Zhadibnij Revnivij i n i i n i Priklad Vidpovidnistab xa a span style background color 999999 color FFFFFF abxa b a b span bxaa ale ne abxa span style background color 999999 color FFFFFF abxaa span tomu sho litera b a b uzhe zajnyataGrupuvannya Poznachennya grupi Krugli duzhki vikoristovuyutsya dlya viznachennya oblasti diyi j prioritetu operacij Shablon useredini grupi obroblyayetsya yak yedine cile j mozhe buti kvantifikovanim Napriklad viraz tr au m znajde poslidovnist vidu trumtram trum tramtrum Zvorotnij zv yazok Odne iz zastosuvan grupuvannya povtorne vikoristannya ranishe znajdenih grup simvoliv pidryadkiv blokiv poznachenih pidviraziv Pri obrobci virazu pidryadki sho znajdeni za shablonom useredini grupi zberigayutsya v okremij oblasti pam yati j otrimuyut nomer pochinayuchi z odinici Kozhnomu pidryadku vidpovidaye para duzhok u regulyarnomu virazi Kvantifikaciya grupi ne vplivaye na zberezhenij rezultat tobto zberigayetsya lishe pershe vhodzhennya Zazvichaj pidtrimuyetsya do 9 numerovanih pidryadkiv iz nomerami vid 1 do 9 ale deyaki interpretatori dozvolyayut pracyuvati z bilshoyu kilkistyu Zgodom u mezhah danogo regulyarnogo virazu mozhna vikoristati poznachennya vid 1 do 9 dlya perevirki na zbig iz ranishe znajdenim pidryadkom Napriklad regulyarnij viraz ta tu 1 znajde ryadok ta ta abo tu tu ale propustit ryadok ta tu Takozh ranishe znajdeni pidryadki mozhna vikoristovuvati pri zamini za regulyarnim virazom U takomu razi v tekst sho zamishaye vstavlyayutsya ti zh poznachennya sho j u mezhah samogo virazu Grupuvannya bez zvorotnogo zv yazku Yaksho grupa vikoristovuyetsya tilki dlya grupuvannya i yiyi rezultat nadali ne bude potriben to mozhna vikoristati grupuvannya vidu i shablon i Pid rezultat takogo grupuvannya ne vidilyayetsya okrema oblast pam yati j vidpovidno yij ne priznachayetsya nomer Ce pozitivno vplivaye na shvidkist vikonannya virazu ale znizhuye zruchnist chitannya Atomarne grupuvannya Atomarne grupuvannya vidu gt i shablon i tak samo yak grupuvannya bez zvorotnogo zv yazku ne stvoryuye zvorotnih zv yazkiv Na vidminu vid nogo take grupuvannya zaboronyaye vertatisya nazad po ryadku yaksho chastina shablonu vzhe znajdena Priklad Vidpovidnist Stvoryuvani grupia bc b x cc span style background color 999999 color FFFFFF abcc span axcc abcc span style background color 999999 color FFFFFF axcc span a span style background color 999999 color FFFFFF b span ccaxcc abcca span style background color 999999 color FFFFFF x span cca bc b x cc nemayea gt bc b x cc abcc span style background color 999999 color FFFFFF axcc span ale ne span style background color 999999 color FFFFFF abcc span axcc variant x znajdenij inshi zignorovania gt x xa ne znajdetsya span style background color 999999 color FFFFFF axxxa span usi x zajnyati i nemaye povernennya vseredinu grupi Atomarne grupuvannya vikonuyetsya she shvidshe nizh grupuvannya bez zvorotnogo zv yazku i zberigaye procesornij chas pri vikonanni reshti virazu tomu sho zaboronyaye perevirku bud yakih inshih variantiv useredini grupi koli odin variant uzhe znajdenij Ce duzhe korisno pri optimizaciyi grup iz mnozhinoyu riznih variantiv Modifikatori Modifikatori diyut iz momentu vhodzhennya j do kincya regulyarnogo virazu abo protilezhnogo modifikatora Deyaki interpretatori mozhut zastosuvati modifikator do vsogo virazu a ne z momentu jogo vhodzhennya Sintaksis Opis i Vklyuchaye nechutlivist virazu do registra simvoliv angl case insensitivity i Viklyuchaye s Vklyuchaye rezhim vidpovidnosti tochki simvolam perenosu ryadka j povernennya karetki s Viklyuchaye m Simvoli i viklikayut vidpovidnist tilki pislya j do simvoliv novogo ryadka m iz pochatkom i kincem ryadka x Vklyuchaye rezhim bez urahuvannya probiliv mizh chastinami regulyarnogo virazu j dozvolyaye vikoristovuvati dlya komentariv x Viklyuchaye Grupi modifikatori mozhna ob yednuvati v odnu grupu i sm Taka grupa vklyuchaye rezhim i i viklyuchaye rezhim s m Yaksho vikoristannya modifikatoriv potribne tilki v mezhah grupi to potribnij shablon vkazuyetsya vseredini grupi pislya modifikatoriv i dvokrapki Napriklad i i tv set znajde TVset ale ne TVSET Komentari Dlya dodavannya komentariv u regulyarnij viraz mozhna vikoristovuvati grupi komentari vidu i komentar i Taka grupa interpretatorom cilkom ignoruyetsya j ne pereviryayetsya na vhodzhennya v tekst Napriklad viraz A tut komentar B vidpovidaye ryadku AB Pererahuvannya Vertikalna risa rozdilyaye dopustimi varianti Napriklad gray grey vidpovidaye gray abo grey Varto pam yatati sho perebir variantiv vikonuyetsya zliva pravoruch yak voni vkazani Yaksho potribno vkazati perelik variantiv useredini skladnishogo regulyarnogo virazu to jogo potribno vzyati v grupu Napriklad gray grey abo gr a e y opisuyut ryadok gray abo grey U razi odnosimvolnih alternativ krashij variant gr ae y tomu sho porivnyannya iz simvolnim klasom vikonuyetsya prostishe nizh obrobka grupi z perevirkoyu na vsi yiyi mozhlivi modifikatori j generaciyeyu zvorotnogo zv yazku Pereglyad upered ta nazad U bilshosti realizacij regulyarnih viraziv ye sposib provaditi poshuk fragmenta tekstu pereglyadayuchi ale ne vklyuchayuchi v znajdene navkolishnij tekst sho roztashovanij do abo pislya shukanogo fragmenta tekstu Napriklad takim sposobom legko znajti im ya tegu HTML ne vklyuchayuchi v rezultat poshuku otochuyuchi jogo kutovi duzhki abo inshi znaki ale j ne upuskayuchi yih z uvagi pri poshuku potribnogo kontekstu Pereglyad iz zaperechennyam vikoristovuyetsya ridshe j stezhit za tim shob ukazani vidpovidnosti navpaki ne zustrichalisya do abo pislya shukanogo tekstovogo fragmenta Predstavlennya Vid pereglyadu Priklad regulyarnogo virazu Vidpovidnist i shablon i Pozitivnij pereglyad upered Lyudovik XVI LyudovikXV span style background color 999999 color FFFFFF Lyudovik span XVI span style background color 999999 color FFFFFF Lyudovik span XVIII LyudovikLXVII LyudovikXXL i shablon i Negativnij pereglyad upered iz zaperechennyam Lyudovik XVI span style background color 999999 color FFFFFF Lyudovik span XV LyudovikXVI LyudovikXVIII span style background color 999999 color FFFFFF Lyudovik span LXVII span style background color 999999 color FFFFFF Lyudovik span XXL lt i shablon i Pozitivnij pereglyad nazad lt Sergij Ivaniv Sergij span style background color 999999 color FFFFFF Ivaniv span Igor Ivaniv lt i shablon i Negativnij pereglyad nazad iz zaperechennyam lt Sergij Ivaniv Sergij Ivaniv Igor span style background color 999999 color FFFFFF Ivaniv span Poshuk za umovoyu U bagatoh realizaciyah regulyarnih viraziv isnuye mozhlivist vibirati yakim shlyahom pide perevirka v tomu abo inshomu misci regulyarnogo virazu na pidstavi vzhe znajdenih znachen Predstavlennya Poyasnennya Priklad Vidpovidnist i yaksho i i to i i inakshe i Yaksho operaciya pereglyadu uspishna to dali vikonuyetsya chastina i to i inakshe vikonuyetsya chastina i inakshe i U virazi mozhe vikoristovuvatisya kozhna iz chotiroh operacij pereglyadu Varto vrahovuvati sho operaciya pereglyadu nulovoyi shirini tomu chastini i to i u razi pozitivnogo abo i inakshe i u razi negativnogo pereglyadu povinni mistiti v sobi opis shablonu z operaciyi pereglyadu lt a m p ma span style background color 999999 color FFFFFF m span span style background color 999999 color FFFFFF p span ap i n i i to i i inakshe i Yaksho n a grupa povernula znachennya to poshuk za umovoyu vikonuyetsya za shablonom i to i inakshe za shablonom i inakshe i a 1 m p m span style background color 999999 color FFFFFF am span span style background color 999999 color FFFFFF p span a span style background color 999999 color FFFFFF p span Rizne Dva regulyarnih virazi mozhna ob yednati U comu razi otrimanij skladnij viraz bude ryadkom sho ye ob yednannyam dvoh ryadkiv yaki vidpovidayut cim prostim virazam Dva regulyarnih virazi mozhna z yednati infiksnim operatorom u comu razi skladnij viraz bude vidpovidatime ryadkam sho vidpovidayut abo pershomu abo drugomu prostomu regulyarnomu virazu Operatori povtoru mayut bilshij prioritet nizh operator ob yednannya a ostannij u svoyu chergu maye bilshij prioritet nizh operator alternativi Ci pravila prioritetu mozhna zminiti za dopomogoyu kruglih duzhok PrikladiNavedemo dekilka slovesnih prikladiv regulyarnih viraziv tri cifri takomu shablonu vidpovidayut ryadki 121 424 ale ne 23abv dvi cifri pislya yakih stoyit krapka za yakoyu jdut kilka cifr prote ne menshe odniyeyi comu shablonu vidpovidayut 11 2 11 4a ale ne 11 Regulyarni virazi podibni do arifmetichnih u tomu sho formuyutsya z menshih za dopomogoyu operatoriv Zagolovki rozdiliv Vikipediyi Vidpovidno do pravil formatuvannya Vikipediyi nazvi rozdiliv pochinayutsya z dekilkoh znakiv dorivnyuye na pochatku ryadka Nastupnij regulyarnij viraz dlya GNU Emacs vidpovidaye takim zagolovkam 1Div takozhPredstavlennya simvoliv u regulyarnih virazah sed dzherela regulyarnih viraziv Perl poshirena mova programuvannya regulyarni virazi vklyucheno do sintaksisu Regulyarni podiyi ta virazi teoretichni vidomosti pro virazi regulyarnimi movami Regulyarna mnozhina Algoritm Erli Visota iteraciyi movi Zistavlyannya zi vzircemPrimitkiRuslan Mitkov 2003 The Oxford Handbook of Computational Linguistics Oxford University Press s 754 ISBN 978 0 19 927634 9 Mark V Lawson 17 veresnya 2003 Finite Automata CRC Press s 98 100 ISBN 978 1 58488 255 8 Dlya zruchnogo vikoristannya poslidovnostej liter u deyakih movah neobhidno vstanoviti kodovu storinku u yakij ci poslidovnosti budut iti v poryadku vid i do zaznachenih simvoliv U Yunikodi deyaki literi ukrayinskogo alfavitu znahodyatsya za mezhami diapazoniv A Ya ta a ya 1 PosilannyaRegular Expressions info angl Instrumenti dlya roboti z regulyarnimi virazami prikladi ta dovidniki DMOZ Perelik posilan na resursi pro regulyarni virazi angl Interaktivnij redaktor regexp iv docs linux org ua 24 sichnya 2007 LiteraturaGavrilkiv V M Formalni movi ta algoritmichni modeli I F Simik 2012 172 s originalu ukr Gavrilkiv V M Regulyarni virazi u programnih produktah I F Golinej 2012 72 s ukr Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi