Синтаксис регулярних виразів (posix)

Синтаксис регулярних виразів (POSIX)

Структура регулярних виразів POSIX чимось нагадує структуру типових математичних виразів - різні елементи (оператори) об'єднуються один з одним і утворюють більш складні вирази. Однак саме сенс об'єднання елементів робить регулярні вирази таким потужним і виразним засобом. Можливості не обмежуються пошуком літерального тексту (наприклад, конкретного слова або числа); ви можете провести пошук рядків з різною сематікой, але схожим синтаксисом - наприклад, всіх тегів HTML у файлі.

Найпростіше регулярний вираз збігається з одним літерально словом - наприклад, вираз g збігається в таких рядках, як g. haggle. bag. Вираз, отримане при об'єднанні кількох літеральних символів, збігається з тими ж правилами - наприклад, послідовність gan збігається в люьой рядку, що містить ці символи (наприклад gan. Organize).

оператор | (Вертикальна риса) перевіряє збіг однієї з кількох альтернатив. Наприклад, регулярний вираз php | zend перевіряє рядок на наявність php або zend.

Квадратні дужки ([]) мають особливий сенс в контролі регулярних виразів - вони означають "будь-який символ з перерахованих в дужках". На відміну від регулярного виразу word. яке збігається в усіх рядках містить літеральний текст word. вираз [word] збігається в будь-якому рядку, що містить символ w. o. r або d. Квадратні дужки грають важливу роль при роботі з регулярними виразами, оскільки в процесі пошуку часто виникає завдання пошуку символів з заданого інтервалу. Нижче перераховані деякі часто використовувані інтервали:
  • [0-9] - збігається з будь-якою десяткової цифрою від 0 до 9;
  • [A-z] - збігається з будь-яким символом нижнього регістра від a до z;
  • [A-Z] - збігається з будь-яким символом верхнього регістру від A до Z;
  • [A-Z] - збігається з будь-яким символом нижнього або верхнього регістру від a до Z;

    Перераховані інтервали демонструють загальний принцип. Наприклад, ви можете скористатися інтервалом [0-3] для позначення будь-якого символу від 0 до 3 або інтервалом [a-d] для позначення будь-якого символу нижнього регістра від a до d.

    Інтервали визначаються довільно.

    Існує особливий клас службових символів, що позначають кількість повторень окремого символу або конструкції, укладеної в квадратні дужки. ці службові символи (+. * і називаються квантіфікаторамі. Принцип їх дії найпростіше пояснити на прикладах.

  • S + означає один або кілька символів S. стоять поспіль;
  • S * означає нуль і більше символів S. стоять поспіль;
  • S? означає нуль або один символ S;
  • S означає два символу S. стоять поспіль;
  • S означає від двох до трьох символів S. стоять поспіль;
  • S означає два і більше символів S. стоять поспіль;

    Інші службові символи

    Службові символи $ і ^ збігаються не з символами, а з певною позиції в рядку. Наприклад, вираз S $ означає рядок, яка завершується символом S. а вираз ^ S - рядок, що починається з символу S.

  • Конструкція [^ a-zA-Z] збігається з будь-яким символом, що не входять в зазначені інтервали (a-z і A-Z).
  • Службовий символ. (Точка) означає будь-який символ. Наприклад, вираз S.S збігається з символом S. за яким слід довільний символ, після чого знову слід S. Об'єднання службових символів призводить до появи більш складних виразів. Розглянемо кілька прикладів:
  • ^. $ - будь-який рядок, що містить два символи.
  • (. *) - довільна послідовність символів, укладених між lt; b> і lt; / b>.
  • p (hp *) - символ p. за яким слід нуль і більше примірників послідовності hp (наприклад, php).

    Іноді потрібно знайти службові символи в рядках замість того, щоб використовувати їх в описаному спеціальному контексті. Для цього службові символи екрануються зворотного рисою (\). Наприклад. Наприклад, для пошуку символу $ треба використовувати вираз \ $.

    Стандартні інтервальні вирази (символьні класи)

    Для зручності програмування в стилі POSIX були визначені деякі стандартні інтервальні вирази, також званими символьними класами (character classes). Символьний клас визначає один символ з заданого інтервалу - наприклад, букву алфавіту або цифру.
  • [[: Alpha:]] - алфавітний символ (aA-zZ);
  • [[: Digit:]] - цифра (0-9);
  • [[: Alnum:]] - алфавітний символ (aA-zZ) або цифра (0-9).
  • [[: Space:]] - пропуски (символи нового рядка, табуляції і т.д.)