Выражение — это строка символов. Символы, которые имеют особое назначение, называются метасимволами. Так, например, кавычки могут выделять прямую речь, т.е. быть метасимволами для строки, заключенной в эти кавычки. Регулярные выражения — это набор символов и/или метасимволов, которые наделены особыми свойствами. [47]
Основное назначение регулярных выражений — это поиск текста по шаблону и работа со строками.
Звездочка — * — означает любое количество символов в строке, предшествующих "звездочке", в том числе и нулевое число символов.
Выражение "1133*" — означает 11 + один или более символов "3" + любые другие символы: 113, 1133, 113312, и так далее.
Точка — . — означает не менее одного любого символа, за исключением символа перевода строки (\n). [48]
Выражение "13." будет означать 13 + по меньшей мере один любой символ (включая пробел): 1133, 11333, но не 13 (отсутствуют дополнительные символы).
Символ — ^ — означает начало строки, но иногда, в зависимости от контекста, означает отрицание в регулярных выражениях.
Знак доллара — $ — в конце регулярного выражения соответствует концу строки.
Выражение "^$" соответствует пустой строке.
![]() |
Символы ^ и $ иногда еще называют якорями, поскольку они означают, или закрепляют, позицию в регулярных выражениях. |
Квадратные скобки — [...] — предназначены для задания подмножества символов. Квадратные скобки, внутри регулярного выражения, считаются одним символом, который может принимать значения, перечисленные внутри этих скобок..
Выражение "[xyz]" — соответствует одному из символов x, y или z.
Выражение "[c-n]" соответствует одному из символов в диапазоне от c до n, включительно.
Выражение "[B-Pk-y]" соответствует одному из символов в диапазоне от B до P или в диапазоне от k до y, включительно.
Выражение "[a-z0-9]" соответствует одному из символов латиницы в нижнем регистре или цифре.
Выражение "[^b-d]" соответствует любому символу, кроме символов из диапазона от 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" и т.п.
Знак вопроса — ? — означает, что предыдущий символ или регулярное выражение встречается 0 или 1 раз. В основном используется для поиска одиночных символов.
Знак "плюс" — + — указывает на то, что предыдущий символ или выражение встречается 1 или более раз. Играет ту же роль, что и символ "звездочка" (*), за исключением случая нулевого количества вхождений.
Экранированные "фигурные скобки" — \{ \} — задают число вхождений предыдущего выражения.
Экранирование фигурных скобок — обязательное условие, иначе они будут интерпретироваться как простые символы. Такой порядок использования, технически, не является частью основного набора правил построения регулярных выражений.
Выражение "[0-9]\{5\}" — в точности соответствует подстроке из пяти десятичных цифр (символов из диапазона от 0 до 9, включительно).
![]() |
В "классической" (не совместимой с POSIX) версии awk, фигурные скобки не могут быть использованы. Однако, в gawk предусмотрен ключ --re-interval, который позволяет использовать (неэкранированные) фигурные скобки.
Язык программирования Perl и некоторые версии egrep не требуют экранирования фигурных скобок. |
Круглые скобки — ( ) — предназначены для выделения групп регулярных выражений. Они полезны при использовании с оператором "|" и при извлечении подстроки с помощью команды expr.
Вертикальная черта — | — выполняет роль логического оператора "ИЛИ" в регулярных выражениях и служит для задания набора альтернатив.
![]() |
Некоторые версии sed, ed и ex поддерживают экранированные версии регулярных выражений, описанные выше. |
Это альтернативный способ указания диапазона символов.
Класс [:alnum:] — соответствует алфавитным символам и цифрам. Эквивалентно выражению A-Za-z0-9.
Класс [:alpha:] — соответствует символам алфавита. Эквивалентно выражению A-Za-z.
Класс [:blank:] — соответствует символу пробела или символу табуляции.
Класс [:cntrl:] — соответствует управляющим символам (control characters).
Класс [:digit:] — соответствует набору десятичных цифр. Эквивалентно выражению 0-9.
Класс [:graph:] (печатаемые и псевдографические символы) — соответствует набору символов из диапазона ASCII 33 - 126. Это то же самое, что и класс [:print:], за исключением символа пробела.
Класс [:lower:] — соответствует набору алфавитных символов в нижнем регистре. Эквивалентно выражению a-z.
Класс [:print:] (печатаемые символы) — соответствует набору символов из диапазона ASCII 32 - 126. По своему составу этот класс идентичен классу [:graph:], описанному выше, за исключением того, что в этом классе дополнительно присутствует символ пробела.
Класс [:space:] — соответствует пробельным символам (пробел и горизонтальная табуляция).
Класс [:upper:] — соответствует набору символов алфавита в верхнем регистре. Эквивалентно выражению A-Z.
Класс [:xdigit:] — соответствует набору шестнадцатиричных цифр. Эквивалентно выражению 0-9A-Fa-f.
![]() |
Вообще, символьные классы POSIX требуют заключения в кавычки или двойные квадратные скобки ([[ ]]).
Эти символьные классы могут использоваться, с некоторыми ограничениями, даже в операциях подстановки имен файлов (globbing).
Примеры использования символьных классов в сценариях вы найдете в Пример 12-17 и Пример 12-18. |
Sed, awk и Perl, используемые в сценариях в качестве фильтров, могут принимать регулярные выражения в качестве входных аргументов. См. Пример A-13 и Пример A-19.
В качестве стандартного руководства по этой сложной теме можно порекомендовать "Mastering Regular Expressions", автор Friedl. Книга "Sed & Awk" (авторы Dougherty и Robbins) так же дает полное и ясное описание регулярных выражений (см. раздел Библиография).
[47] В качестве простейшего регулярного выражения можно привести строку, не содержащую никаких метасимволов.
[48] Поскольку с помощью sed, awk и grep обрабатывают одиночные строки, то обычно символ перевода строки не принимается во внимание. В тех же случаях, когда производится разбор многострочного текста, метасимвол "точка" будет соответствовать символу перевода строки.
Последние комментарии