POSIX регулярні вирази — це формат регулярних виразів, заснований на стандарті POSIX (Portable Operating System Interface). Вони використовуються для пошуку та обробки тексту в Unix/Linux середовищах, таких як утиліти grep
, sed
, awk
і vi
. POSIX регулярні вирази мають дещо обмежений синтаксис і можливості в порівнянні з PCRE (Perl Compatible Regular Expressions), але є стандартом у багатьох системних інструментах.
Види POSIX регулярних виразів
-
Основні регулярні вирази (BRE — Basic Regular Expressions):
- Використовуються за замовчуванням в інструментах, як-от
grep
. - Потребують символу
\
для активації спеціальних метасимволів.
- Використовуються за замовчуванням в інструментах, як-от
-
Розширені регулярні вирази (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} (без екранування) |
Приклади
-
Знайти рядки, що починаються з “abc” (для BRE):
grep '^abc' файл.txt
-
Знайти слова “foo” або “bar” (для ERE):
grep -E 'foo|bar' файл.txt
-
Перевірити наявність лише цифр у рядку:
grep '^[[:digit:]]\+$' файл.txt
-
Замінити всі пробіли на один (з
sed
):sed 's/[[:space:]]\+/ /g' файл.txt
POSIX регулярні вирази менш гнучкі, ніж PCRE, але їх перевага — портативність та підтримка в базових інструментах Unix-подібних систем.