НОУ ІНТУІТ, Лекція, Регулярні вирази
11.1. Метасимволи регулярних виразів
Як метасимволи регулярних виразів завжди використовуються такі символи:
- * - означає "нуль або більше" повторень символу;
- ? - означає "нуль чи одне" повторення символу.
Рідше використовуються такі метасимволи:
- [ - ] - означає, що у поточному місці рядки можуть бути символи в діапазоні від до . Наприклад: [A-Z] - всі латинські великі літери; [A-Za-z] – всі латинські літери;
- + - означає "один чи більше" повторень символів;
- (…) - угруповання символів та метасимволів;
- - Логічне АБО. Має той самий сенс, що й у РБНФ.
Це - основні метасимволи. Крім того, у Сі подібних мовах використовуються метасимволи:
- \n - символ "переклад рядка";
- \r - символ "повернення каретки";
6 – 8 пробілів після поточного символу);
| \nnn | Представляє символ, вісімковий код якого дорівнює nnn | |
| \xnn | Представляє символ, шістнадцятковий код якого дорівнює nn | |
| \cn | Представляє символ керування, який генерується при натисканні комбінації клавши Ctrl+n | Фрагмент \cD відповідає Ctrl+D |
| \$ | Символ $ | |
| \@ | Символ @ | |
| \% | Символ % | |
| \a | Дзвінок | |
| \e | Символ Esc (код ASCII 27) | |
| \f | Символ перекладу сторінки (ASCII код 12) | |
| \n | Символ нового рядка (ASCII код 10) | |
| \r | Символ "повернення каретки" (ASCII код 13) | |
| \t | Символ горизонтальний табуляції (ASCII код 9) | |
| \v | Символ вертикальної табуляції (ASCII код 11) | |
| \s | Представляє клас пробельний символів | |
| \S | Представляє клас непробільних символів. | |
| \d | Клас цифрових символів (те ж [0-9]) | |
| \D | Клас нецифрових символів (те саме [^0-9]) | |
| \w | Клас буквено-цифрових символів [a-zA-Z_0-9] | |
| \W | Клас небуквенно-цифрових символів. | |
| \A | Початок рядка | |
| \Z | Кінець рядка | |
| \b | Кордони слова (між класами \w та \W) | |
| \B | Позначає не межі слів | |
| \l | Перший символ регулярного виразу перетворюється на нижній регістр. | |
| \u | Перший символ регулярного виразу перетворюється на верхній регістр. | |
| \L ...\E | Означає, що всі символи в регулярному вираженні між \L та \E перетворюються на нижній регістр. | |
| \U ... \E | Означає, що всі символи в регулярному вираженні між \L та \E перетворюються на верхній регістр. | |
| \Q ... \E | Означає, що всі метасимволи в регулярному вираженні між Q і Eекрануються за допомогою метасимволу. | Фрагмент /\Q^*?+\E/ аналогічний /\^\*\&\+/ |
| \G | Позначає точку, де закінчився попередній пошук m//g. |
11.2. Прості регулярні вирази
До "найпростіших" регулярних виразів можна віднести:
Розглянемо їх детальніше.
11.2.1. Оболонка MS-DOS Command
У цій оболонці (іноді вона називається command shell MD-DOS) використовуються такі метасимволи: "*" і "?". При цьому "*" означає будь-яке, у тому числі нульове, повторення допустимих символів, а "?" означає наявність однієї з допустимих символів. Приклади шаблонів:
- *.* - всі файли з будь-яким розширенням;
- *.txt - усі файли з розширенням .txt;
- command.* - усі файли з ім'ям "command" та будь-яким розширенням;
- *.do? - Усі файли, розширення яких починається з "do";
- *. - усі файли, що мають трилітерне розширення;
- *. - Усі файли з "порожнім" розширенням;
- com* - всі файли, що починаються із символів "com" (проте краще використовувати шаблон "com*.*");
- *.?* - всі файли з непустим розширенням;
- і т.д.
Ці шаблони можна використовувати в операціях з файлами, наприклад:
- > ren *.HTM *.htm - перейменовує всі файли з розширенням .HTM (верхній регістр) на ті ж файли з розширенням .htm (нижній регістр);
- > pkzip -u archieve.zip *.doc *.txt – оновлює архів archieve.zip файлами з розширеннями .doc та .txt.
Докладніше про оболонки MS-DOS і Windows дивись [82, 84, 85, 4, 33]
11.2.2. Оболонка Linux Bash shell
Ця оболонка містить усі метасимволи command shell з тими ж значеннями, але містить також метасимволи: […] та \.
Квадратні дужки дозволяють задати набірсимволи для пошуку. Система шукатиме в іменах файлів будь-який із цих символів (див. [66]).
Нехай у нас в каталозі системи є файли:
doc1, doc2, doc3, docA, docB, docC, document.
Тоді наступні команди видадуть такі результати:
Як бачимо, використання квадратних дужок набагато спрощує пошук потрібних значень, " конкретизуючи " запит.
Використання метасимволу "\"
Метасимвол перевизначає значення наступного за ним символу або метасимволу. Наприклад:
11.2.3. Регулярні вирази Multi Edit
- Find ...(Пошук);
- Replace…(Заміна);
- File Find…(Пошук у файлах);
- File Replace…(Заміна у файлах);
Для використання регулярних у цих командах необхідно в діалоговому вікні цих команд встановити перемикач у положення: "Regular Expression" (зазвичай він там і стоїть). Якщо ж Ви встановите перемикач у положення "Literal", система сприйме метасимволи як звичайні символи.
Розглянемо ці команди детальніше.

Запит пишеться у верхньому рядку редагування, запускається вибором кнопки "OK" або натисканням клавіші "Enter".

Запит пишеться у верхньому рядку редагування, фрагмент, що замінюється - рядком нижче. Запускається заміна вибором клавіші "OK" або натисканням клавіші "Enter".
Примітка: у рядку замінного фрагмента не використовуються метасимволи . Тому, якщо Ви задали наступний шаблон:
- пошук значень у непустих дужках, та наступний фрагмент заміни:
то команда замінить усі вирази, знайдені за шаблоном, рядком "a(?*)b". Це відрізняє реалізацію команди заміни в Multi Edit (і не лише! Заборонана такі метасимволи є і в Perl) від "правильної" реалізації регулярних виразів в інших програмах (оболонках shell в операційних системах).