<
  • Главная
Статьи

18.1. Короткий вступ в регулярні вирази

Вираз - це рядок символів. Символи, які мають особливе призначення, називаються метасимвол. Так, наприклад, лапки можуть виділяти пряму мову, тобто бути метасимвол для рядка, укладеної в ці лапки. Регулярні вирази - це набір символів і / або метасимволов, які наділені особливими властивостями. [47]

Основне призначення регулярних виразів - це пошук тексту по шаблону і робота з рядками.

  • Зірочка - * - означає будь-яку кількість символів в рядку, що передують "зірочці", в тому числі і нульове число символів.

    Вираз "+1133 *" - означає 11 + один або більше символів "3" + будь-які інші символи: 113, 1133, 113 312, і так далі.

  • Крапка -- . - означає не менше одного будь-якого символу, за винятком символу перекладу рядка (\ n). [48]

    Вираз "13." означатиме 13 + щонайменше один будь-який символ (включаючи пробіл): 1133, 11333, але не 13 (відсутні додаткові символи).

  • Символ - ^ - означає початок рядка, але іноді, в залежності від контексту, означає заперечення в регулярних виразах.

  • Знак долара - $ - в кінці регулярного виразу відповідає кінцю рядка.

    Вираз "^ $" відповідає порожній рядку.

    Вираз - це рядок символів

    Символи ^ і $ іноді ще називають якорями, оскільки вони означають, або закріплюють, позицію в регулярних виразах.

  • Квадратні дужки - [...] - призначені для завдання підмножини символів. Квадратні дужки, всередині регулярного виразу, вважаються одним символом, який може приймати значення, перераховані всередині цих дужок ..

    Вираз "[xyz]" - відповідає одному із символів x, y або z.

    Вираз "[cn]" відповідає одному із символів в діапазоні від c до n, включно.

    Вираз "[B-Pk-y]" відповідає одному із символів в діапазоні від B до P або в діапазоні від k до y, включно.

    Вираз "[a-z0-9]" відповідає одному із символів латиниці в нижньому регістрі або цифрі.

    Вираз "[^ bd]" відповідає будь-якому символу, крім символів з діапазону від b до d, включно. В даному випадку, метасимвол ^ означає заперечення.

    Об'єднуючи квадратні дужки в одну послідовність, можна задати шаблон шуканого слова. Так, вираз "[Yy] [Ee] [Ss]" відповідає словами yes, Yes, YES, yEs і так далі. Вираз "[0-9] [0-9] [0-9] - [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]" визначає шаблон для пошуку будь-якого номера картки соціального страхування (для США).

  • Зворотний слеш - \ - служить для екранування спеціальних символів, це означає, що екрановані символи повинні інтерпретуватися буквально, тобто як прості символи.

    Комбінація "\ $" вказує на те, що символ "$" трактується як звичайний символ, а не як ознака кінця рядка в регулярних виразах. Аналогічно, комбінація "\\" відповідає простому символу "\".

  • екрановані "Кутові дужки" - \ <... \> - відзначають кордону слова.

    Кутові дужки повинні екрануватися, інакше вони будуть інтерпретуватися як прості символи.

    Вираз "\ <the \>" відповідає слову "the", і не відповідає словами "them", "there", "other" і т.п.

    bash $ cat textfile This is line 1, of which there is only one instance. This is the only instance of line 2. This is line 3, another line. This is line 4. bash $ grep 'the' textfile This is line 1, of which there is only one instance. This is the only instance of line 2. This is line 3, another line. bash $ grep '\ <the \>' textfile This is the only instance of line 2.

  • Додаткові метасимволу. Використовуються при роботі з egrep , awk і Perl

  • Знак питання -- ? - означає, що попередній символ або регулярний вираз зустрічається 0 або 1 раз. В основному використовується для пошуку одиночних символів.

  • Знак "плюс" - + - вказує на те, що попередній символ або вираз зустрічається 1 або більше разів. Грає ту ж роль, що і символ "зірочка" (*), за винятком випадку нульового кількості входжень.

    # GNU версії sed і awk допускають використання "+", # але його необхідно екранувати. echo a111b | sed -ne '/ a1 \ + b / p' echo a111b | grep 'a1 \ + b' echo a111b | gawk '/ a1 + b /' # Всі три варіанти еквівалентні. # Спасибі SC

    >

  • екрановані "Фігурні дужки" - \ {\} - задають число входжень попереднього виразу.

    Екранування фігурних дужок - обов'язкова умова, інакше вони будуть інтерпретуватися як прості символи. Такий порядок використання, технічно, не є частиною основного набору правил побудови регулярних виразів.

    Вираз "[0-9] \ {5 \}" - в точності відповідає підрядку з п'яти десяткових цифр (символів з діапазону від 0 до 9, включно).

    Вираз [0-9] \ {5 \} - в точності відповідає підрядку з п'яти десяткових цифр (символів з діапазону від 0 до 9, включно)

    В "класичної" (не сумісної з POSIX) версії awk , Фігурні дужки не можуть бути використані. Однак, в gawk передбачений ключ --re-interval, який дозволяє використовувати (неекрановані) фігурні дужки.

    bash $ echo 2222 | gawk --re-interval '/ 2 {3} /' 2222

    Мова програмування Perl і деякі версії egrep не вимагають екранування фігурних дужок.

  • Круглі дужки - () - призначені для виділення груп регулярних виразів. Вони корисні при використанні з оператором "|" і при витягу подстроки за допомогою команди expr .

  • Вертикальна риса - | - виконує роль логічного оператора "АБО" в регулярних виразах і служить для завдання набору альтернатив.

    bash $ egrep 're (a | e) d' misc.txt People who read seem to be better informed than those who do not. The clarinet produces sound by the vibration of its reed.

  • Класи символів POSIX. [: class:]

    Це альтернативний спосіб вказівки діапазону символів.

  • Клас [: alnum:] - відповідає алфавітним символам і цифрам. Еквівалентно висловом A-Za-z0-9.

  • Клас [: alpha:] - відповідає символам алфавіту. Еквівалентно висловом A-Za-z.

  • Клас [: blank:] - відповідає символу пробілу або символу табуляції.

  • Клас [: cntrl:] - відповідає керуючим символам (control characters).

  • Клас [: digit:] - відповідає набору десяткових цифр. Еквівалентно висловом 0-9.

  • Клас [: graph:] (друковані та псевдографічні символи) - відповідає набору символів з діапазону ASCII 33 - 126. Це те ж саме, що і клас [: print:], за винятком символу пробілу.

  • Клас [: lower:] - відповідає набору алфавітних символів в нижньому регістрі. Еквівалентно висловом az.

  • Клас [: print:] (друковані символи) - відповідає набору символів з діапазону ASCII 32 - 126. За своїм складом цей клас ідентичний класу [: graph:], описаного вище, за винятком того, що в цьому класі додатково присутній символ пробілу .

  • Клас [: space:] - відповідає пробільним символам (пробіл і горизонтальна табуляція).

  • Клас [: upper:] - відповідає набору символів алфавіту в верхньому регістрі. Еквівалентно висловом AZ.

  • Клас [: xdigit:] - відповідає набору шістнадцяткових цифр. Еквівалентно висловом 0-9A-Fa-f.

Sed , awk і Perl , Використовувані в сценаріях в якості фільтрів, можуть приймати регулярні вирази в якості вхідних аргументів. Див. Приклад A-13 і Приклад A-19 .

В якості стандартного керівництва по цій складній темі можна порекомендувати "Mastering Regular Expressions", автор Friedl. Книга "Sed & Awk" (автори Dougherty і Robbins) так само дає повне і ясне опис регулярних виразів (див. Розділ Бібліографія ).



Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью