Регулярні вирази POSIX (Portable Operating System Interface)

POSIX регулярні вирази — це формат регулярних виразів, заснований на стандарті POSIX (Portable Operating System Interface). Вони використовуються для пошуку та обробки тексту в Unix/Linux середовищах, таких як утиліти grep, sed, awk і vi. POSIX регулярні вирази мають дещо обмежений синтаксис і можливості в порівнянні з PCRE (Perl Compatible Regular Expressions), але є стандартом у багатьох системних інструментах.

Види POSIX регулярних виразів

  1. Основні регулярні вирази (BRE — Basic Regular Expressions):

    • Використовуються за замовчуванням в інструментах, як-от grep.
    • Потребують символу \ для активації спеціальних метасимволів.
  2. Розширені регулярні вирази (ERE — Extended Regular Expressions):

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

Основні елементи POSIX регулярних виразів

Символи:

  • . — відповідає будь-якому символу.
  • [abc] — відповідає a, b, або c.
  • [^abc] — відповідає будь-якому символу, окрім a, b, c.
  • [a-z] — відповідає символам у діапазоні від a до z.
  • [:digit:] — POSIX-клас символів, відповідає будь-якій цифрі (еквівалентно [0-9]).

Якорі:

  • ^ — початок рядка.
  • $ — кінець рядка.

Квантифікатори (у ERE):

  • * — 0 або більше разів.
  • + — 1 або більше разів (тільки у ERE).
  • ? — 0 або 1 раз (тільки у ERE).
  • {n} — рівно n разів.
  • {n,}n або більше разів.
  • {n,m} — від n до m разів.

Групування:

  • (abc) — групування символів (тільки у ERE). У BRE потрібно екранування: \(abc\).

Або (альтернація):

  • a|b — відповідає a або b (тільки у ERE). У BRE потрібно екранування: a\|b.

Класи символів

POSIX визначає спеціальні класи символів, які можна використовувати у межах квадратних дужок:

Клас Значення Еквівалент
[:alnum:] Букви та цифри [a-zA-Z0-9]
[:alpha:] Літери [a-zA-Z]
[:digit:] Цифри [0-9]
[:lower:] Маленькі літери [a-z]
[:upper:] Великі літери [A-Z]
[:space:] Пробільні символи [\t\n\r\f\v ]
[:punct:] Розділові знаки
[:xdigit:] Шістнадцяткові цифри [0-9a-fA-F]

Відмінності BRE та ERE

Функція BRE ERE
Групування \(abc\) (abc)
Альтернація a|b `a
Квантифікатори {n,m} (екранування) {n,m} (без екранування)

Приклади

  1. Знайти рядки, що починаються з “abc” (для BRE):

    grep '^abc' файл.txt
    
  2. Знайти слова “foo” або “bar” (для ERE):

    grep -E 'foo|bar' файл.txt
    
  3. Перевірити наявність лише цифр у рядку:

    grep '^[[:digit:]]\+$' файл.txt
    
  4. Замінити всі пробіли на один (з sed):

    sed 's/[[:space:]]\+/ /g' файл.txt
    

POSIX регулярні вирази менш гнучкі, ніж PCRE, але їх перевага — портативність та підтримка в базових інструментах Unix-подібних систем.