Квантифікатори (повторювачі). Визначення інтервалів та кількості екземплярів
Квантифікатори (повторювачі)
В ситуації коли символ (або частина регулярного виразу) який ми шукаємо, повинен повторитися певну кількість разів, ми можемо просто записати його у регулярний вираз декілька разів. Наприклад, вираз baaac буде шукати символ b за яким слідує три одинакових символа a і все це закінчується символом c. Якщо кількість повторень символа або частини регулярного виразу буде великою, використовувати такий спосіб недоречно. Тим більше трапляються ситуації, коли точна кількість повторень певного символу невідома.
Синтаксис регулярних виразів включає набір спеціальних метасимволів, які успішно вирішують задачі із повторенням символів. Наступний список містить три різних метасимволи, які описують кількісну характеристику символа що знаходиться безпосередньо перед ним.
* – (зірочка) Вказує на те, що символ має повторюватися 0 або більше разів. Цей метасимвол треба розуміти наступним чином: «символ може бути відсутній, або він може бути присутній будь-яку кількість разів».
+ – (плюс) Вказує на те, що символ має повторюватися 1 або більше разів. Цей метасимвол треба розуміти наступним чином: «повинен бути хоча би один такий символ, або він може бути присутній будь-яку кількість разів».
? – (знак запитання) Вказує на те що символ може бути присутній один раз, або може бути відсутній. Цей метасимвол треба розуміти наступним чином: «символ може бути відсутній, або він може бути присутній один раз».
Визначення інтервалів та кількості екземплярів
Окрім квантифікаторів які описують відносні кількісні характеристики символів, в регулярних виразах є спосіб явно вказати яку кількість раз має бути присутнім певний символ (або частина регулярного виразу). Конструкція «{мінімум, максимум}» називається інтервальним квантифікатором. Наприклад, вираз за яким слідує {3,15} може співпасти до 15 разів, якщо це можливо, але він може обійтися і трьома співпаданнями. Якщо у інтервальному квантифікаторі не вказується максимум, то в даному випадку максимальна кількість повторень не передбачається і може бути будь-якою. Запис {0,1} еквівалентний метасимволу «?», а запис {0,} еквівалентний метасимволу «*».
Для того щоб поширити дію квантифікаторів більш ніж на один символ, або на окрему частнину регулярного виразу, нам потрібно заключити потрібну частину у круглі дужки. Вираз «(from:)[email protected]» вказує що ціла послідовність from: може передувати емейл-адресу відправника, або може бути відсутньою.
Символьні класи. Інвертовані символьні класи. Стандартні символьні класи. Приклади використання.
Символьні класи
Символьні класи дають можливість співпадання з одним символів із декількох можливих. Наприклад, ви хочете знайти рядок tray що може бути написаний як trey. За допомогою конструкції «[…]», що називається символьним класом, можна перечислити усі символи що можуть бути у дані позиції тексту. Вираз [e] співпаде тільки з буквою e, вираз [a] співпаде тільки з буквою a, але регулярний вираз [ea] співпаде у будь-якою із цих двох букв. Таким чимом, вираз tr[ae]y означає: «Найти символ t, за яким слідує символ r, за яким слідує символ a або e, і все це закінчується символом y». Поза символьними класами передбачається, що перераховувані символи (наприклад t або r) слідують один за другим – «найти співпадання із t за яким слідує співпадання із r». В символьних класах логіка співпадання інша. Вміст символьного класу визначає список символів, з якими співпаде даний символ у регулярному виразі, тут передбачається вибір будь-якого символу вне залежності від його положення у символьному класі.
Кількість символів у символьному класі може бути будь-якою.
Всередині символьного класу, метасимвол «-» (дефіс), означає інтервал символів. Регулярний вираз <H[1-6]> еквівалентний попередньому варіанту. Класи [0-9] та [a-z], зазвичай використовуються для пошуку цифр та символів нижнього регістру. Інтервали можна успішно комбінувати із звичайними символами. Наприклад, вираз [0-9A-Z:!] співпаде із цифрою, буквою верхнього регістру, символом двох крапок (:), та знаком оклику (!).