Розширені регулярні вирази. Метасимволи початку, кінця рядка та довільного символу. Вибір, пошук рядків, які містять декілька регулярних виразів
Регулярнийвираз - це зразок, який описує набір текстових ланцюжків.
Побудова регулярних виразів чимось схожа на побудову арифметичних
виразів у тому, що в них також використовуються різноманітні оператори
для поєднання менших виразів. Grep розуміє три дещо відмінні версії
синтаксису регулярних виразів, а саме: "basic", "extended" і "perl"
(базовий, розширений і Perl).
Існують основні (basic) і розширені (extended) регулярні вирази.
Зазвичай за замовчуванням програма вважає, що їй в якості аргументу
передано базовий регулярний вираз.
Спочатку розглянемо розширені регулярні вирази, після чого будуть
описані їх відмінності від базових. У розширених регулярних виразах
використовують символи з наступними значеннями:
• ^ - початок рядка
• $ - кінець рядка
• [a-z] - будь-який символ з діапазону
• [^a-z] - будь-який символ, за винятком символів з діапазону
• [abil] - будь-який символ з набору
• [ ^azx] - будь-який символ, за винятком символів з набору
• . - будь-який символ
• * - будь-яке число повторень символу, що стоїть перед *
• + - будь-яке ненульове число повторень символу, що стоїть перед +
• ? - один символ, що стоїть перед ?, чи порожній підрядок (нуль таких
символів)
• & - у виразі, що вказує підрядок, на який потрібно замінити знайдений,
означає повторення знайденого підрядка
Для полегшення задання діапазонів є означені класи символів з
назвами, що «говорять»:
‘[:alnum:]’
Буквено-цифрові символи: ‘[:alpha:]’ i ‘[:digit:]’.
‘[:alpha:]’
Азбучні символи: ‘[:lower:]’ i ‘[:upper:]’.
‘[:blank:]’
Символи пропуску: space i tab.
‘[:cntrl:]’
Символи, що управляють. У ascii, ці символи мають вісімкові коди 000 через 037,
і 177(DEL). У інших символьних множинах, вони - еквівалентні символи, якщо є.
(Control characters. In ascii, these characters have octal codes 000 through 037,
and 177 (DEL). In other character sets, these are the equivalent characters, if any.)
‘[:digit:]’
Цифри: 0 1 2 3 4 5 6 7 8 9.
‘[:graph:]’
Графічні символи: ‘[:alnum:]’ i ‘[:punct:]’.
‘[:lower:]’
Малі букви: a b c d e f g h i j k l m n o p q r s t u v w x y z.
‘[:print:]’
Придатні для друкування символи: ‘[:alnum:]’, ‘[:punct:]’, i space.
‘[:punct:]’
Символи пунктуації: ! " # $ % & ’ ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ‘ { |
} ~.
‘[:space:]’
Пропуски: tab, newline, vertical tab, form feed, carriage return, and space.
‘[:upper:]’
Великі букви: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.
‘[:xdigit:]’
Шістнадцяткові цифри: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f.
Метасимволи
Всі регулярні вирази складаються із звичайних символів та метасимволів. В регулярних виразах метасимволи і звичайні символи, використовуються для досягнення бажаного результату. З іншого боку, якщо у регулярному виразі не використовуються метасимволи, то регулярний вираз перетворюється в «засіб простого пошуку». Це спеціальні символи.
Одними із найбільш простих метасимволів, є метасимвол ^ (кришка) і $ (долар). Ці метасимволи представляють початок і кінець рядка що підлягає перевірці. Метасимвол ^, фактично прив’язує слідуючу частину регулярного виразу до початку рядка.
Метасимвол «.» (крапка), являє собою скорочену форму запису символьного класу, що співпадає із будь-яким символом. Він використовується тоді, коли в декількох позиціях регулярного виразу може знаходитися будь-який символ.
Дуже зручний та корисний метасимвол «|», який означає «або». Цей метасимвол дозволяє об’єднати кілька регулярних виразів в одне, що буде співпадати із будь-яким із підвиразів з яких воно складається. Наприклад, Bob і Robert – два різних вирази, а вираз Bob|Robert – один регулярний вираз співпадаючий із будь-яким із цих рядків. Підвирази, об’єднанні даним способом, називаються альтернативами.
Давайте повернемося до нашого регулярного виразу tr[ae]y. Цікавим нюансом є той, що цей вираз можна записати як tray|trey і навіть tr(a|e)y. В останньому варіанті, круглі дужки відділяють конструкцію вибору від решти виразу (круглі дужки також являються метасимволами). У виразі tr(a|e)y круглі дужки нам необхідні, без них tra|ey буде означати tra або ey – це не те що нам потрібно. Конструкція вибору діє лише всередині круглих дужок.
Не плутайте конструкцію вибору із символьними класами. В символьних класах передбачається співпадання із одним символом цільового тексту. В конструкції вибору кожна альтернатива може бути повноцінним регулярним виразом.