Розширені регулярні вирази. Метасимволи початку, кінця рядка та довільного символу. Вибір, пошук рядків, які містять декілька регулярних виразів

Регулярнийвираз - це зразок, який описує набір текстових ланцюжків.

Побудова регулярних виразів чимось схожа на побудову арифметичних

виразів у тому, що в них також використовуються різноманітні оператори

для поєднання менших виразів. 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 – це не те що нам потрібно. Конструкція вибору діє лише всередині круглих дужок.

Не плутайте конструкцію вибору із символьними класами. В символьних класах передбачається співпадання із одним символом цільового тексту. В конструкції вибору кожна альтернатива може бути повноцінним регулярним виразом.

Наши рекомендации