НОУ ІНТУІТ, Лекція, Регулярні вирази

11.1. Метасимволи регулярних виразів

Як метасимволи регулярних виразів завжди використовуються такі символи:

  • * - означає "нуль або більше" повторень символу;
  • ? - означає "нуль чи одне" повторення символу.

Рідше використовуються такі метасимволи:

  • [ - ] - означає, що у поточному місці рядки можуть бути символи в діапазоні від до . Наприклад: [A-Z] - всі латинські великі літери; [A-Za-z] – всі латинські літери;
  • + - означає "один чи більше" повторень символів;
  • (…) - угруповання символів та метасимволів;
  • - Логічне АБО. Має той самий сенс, що й у РБНФ.

Це - основні метасимволи. Крім того, у Сі подібних мовах використовуються метасимволи:

  • \n - символ "переклад рядка";
  • \r - символ "повернення каретки";

6 – 8 пробілів після поточного символу);

  • v - символ "вертикальна табуляція";
  • \a - "звуковий сигнал";
  • \f - "нова сторінка";
  • '- апостроф;
  • \" - подвійна лапка;
  • \ - зворотний сліш;
  • \xdd - байтове значення у шістнадцятковому поданні;
  • 20 - звичайний пробіл;
  • \0 - нульовий символ (кінець рядка):
  • і т.д.
  • Таблиця 11.1. Метапослідовність регулярних виразів PerlПослідовність Опис Приклади
    \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 в операційних системах).