Регулярное выражениеСоответствующая строка
"x.y"x, за которым следует любой символ с последующим у
"x\.y"х, за которым следует точка с последующим у
"xz?y"х, за которым следует не более одного символа z с последующим у, т.е. "xy" или "xzy", но не "xz" или "xdy"
"xz*y"х, за которым следует любое количество символов z, за которыми следует y, т.е. "xy" или "xzy" или "xzzzy", но не "xz" или "xdy"
"xz+y"x, за которым следует один или несколько экземпляров символа z, за которыми следует у, т.е. "xzy" или "xzzy", но не "xy", "xz" или "xdy"
"s[xyz]t"s, за которым следует любой из символов х, у или z, за которым следует t, т.е. "sxt", "syt" или "szt", но не "st" или "sat"
"a[x0-9]b"а, за которым следует либо х, либо символ в диапазоне 0-9, за которым следует b, то есть, "axb", "a0b" или "а4b", но не "ab" или "aab"
"s[^xyz] t"s, за которым следует любой символ, кроме х, у или z, за которым следует t, т.е. "sdt" или "set", но не "sxt", "syt" или "szt"
"s[^x0-9]t"s, за которым следует любой символ, кроме x или символа в диапазоне 0-9, за которым следует t, т.е. "slt" или "smt", но не "sxt", "s0t" или "s4t"
"^x”x в начале строки, т.е. "xzy" или "xzzy", но не "yzy" или "уху"
"x$"х в конце строки, т.е. "yzx" или "yx", но не "yxz" или "zxy"

Существует большое количество второстепенных вариантов записи регулярных выражений.

1. Выражения-маски. Ограниченный набор соглашений по применению символов-шаблонов (wildcard), использовавшийся в ранних оболочках Unix для сопоставления имен файлов. Существует всего 3 символа-шаблона: * — соответствует любой последовательности символов (как .* в других вариантах); ? — соответствует любому единичному символу (как . в других вариантах); [...] — соответствует классу символов как в других вариантах. В некоторых оболочках (csh, bash, zsh) позднее был добавлен шаблон {} для выбора подстроки. Таким образом, выражение x{a,b}c соответствует строкам xac или xbc, но не xc. В некоторых оболочках выражения-маски получили дальнейшее развитие в направлении расширения регулярных выражений.

2. Базовые регулярные выражения. Форма записи, принятая в исходной утилите grep(1) для извлечения из файла строк, соответствующих заданному регулярному выражению. Выражения этого типа также применяются в строковом редакторе ed(1) и потоковом редакторе sed(1). Профессионалы старой школы Unix считают данное выражение основной, или "унифицированной", разновидностью регулярных выражений. Пользователи, впервые столкнувшиеся с более современными инструментами, склонны использовать расширенную форму, которая описана ниже.

3. Расширенные регулярные выражения. Запись, принятая в расширенной версии grep, egrep(1) для извлечения из файла строк, соответствующих заданному регулярному выражению. Регулярные выражения в Lex и редакторе Emacs весьма близки к egrep-разновидности.

4. Регулярные выражения языка Perl. Форма записи, принятая в regexp-функциях языков Perl и Python. Выражения этого типа являются более мощными по сравнению с egrep-вариантом.

После рассмотрения основных примеров в таблице 8.2 приведена сводка стандартных шаблонов для регулярных выражений. Следует отметить, что в таблицу не включен вариант выражений-масок, поэтому запись "для всех" означает только 3 типа: базовый, расширенный/Emacs и Perl/Python[79].

Таблица 8.2. Введение в операции с регулярными выражениями

Перейти на страницу:

Все книги серии Программирование для профессионалов

Похожие книги