Компания ALT Linux
Опубликован: 14.12.2004 | Доступ: свободный | Студентов: 12603 / 1647 | Оценка: 4.19 / 3.84 | Длительность: 18:18:00
ISBN: 978-5-9556-0019-1
Лекция 14:

Регулярные выражения

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >

Базовое регулярное выражение

Регулярное выражение (далее РВ) служит для задания общего вида строки - части текста, завершающейся символом конца строки и не содержащей этого символа. РВ - это строка, состоящая из обычных символов, имеющих однозначное соответствие в тексте, и специальных символов, которые интерпретируются особым образом. Говорят, что фрагмент строки (или подстрока ) соответствует РВ, если эта подстрока является одним из возможных частных случаев интерпретации РВ. Чтобы отличать регулярные выражения от строк, одни мы будем обозначать так: 'регулярное выражение', а другие - так: строка.

Любой обычный символ - это атомарное РВ. Такому выражению соответствует подстрока из одного этого символа. Например, f соответствует 'f'.

Спецсимвол . - атомарное РВ, которому соответствует подстрока из одного любого символа. Например, M или @ соответствуют '.', аb или abc - не соответствуют (хотя abc содержит три фрагмента - a, b и c, соответствующих '.' ).

Конструкция из специальных символов [ и ], между которыми находится один или несколько других символов, - это атомарное РВ - множество. Ему соответствует подстрока из одного символа, принадлежащего множеству. Например, и x и u соответствуют '[unix]', а U и 8 - не соответствуют. Специальным символом для множества является знак " - ", который задает диапазон. При использовании диапазона в множество включаются все символы, код которых не меньше, чем у символа, стоящего слева от " - ", и не больше, чем у стоящего справа. Например, любая буква латинского алфавита соответствует выражению '[a-zA-Z]'. Если нужно включить в множество сам символ " - ", он должен идти сразу за [ или перед ]. Если при определении множества вместо [ использовать [^, такому атомарному РВ будет соответствовать подстрока из одного символа, не принадлежащего множеству. Например, A и ; соответствуют выражению '[^aeiu-z]', а e и v - не соответствуют.

Последовательность атомарных РВ - составное РВ. Ему соответствует подстрока, состоящая из фрагментов, каждый из которых соответствует очередному атомарному РВ в последовательности. Например, любое двузначное натуральное число соответствует выражению '[1-9][0-9]': в числе, допустим, 36 3 соответствует '[1-9]', а 6 - '[0-9]'. Последовательность составных РВ - тоже составное РВ. Составное РВ, заключенное в спецсимволы - круглые скобки, приобретает свойства атомарного; это называется операцией группирования.

Атомарное РВ, после которого стоит повторитель *, - тоже атомарное РВ. Ему соответствует подстрока, составленная из любого числа (включая 0) фрагментов, каждый из которых соответствует повторяемому РВ. Таким образом, пустая подстрока также соответствует РВ с повторителем. Например, выражению 'a*' соответствуют подстроки a, aa, aaa и т. д. Выражению '[0-9]*' соответствует любая (включая пустую) последовательность десятичных цифр, например 1415926, потому что ее можно разбить на односимвольные фрагменты, каждый из котороых будет соответствовать выражению '[0-9]'. Наконец, выражению '(Foo)*' будут соответствовать подстроки Foo, FooFoo, FooFooFoo и т. д., но не будут соответствовать подстроки Fo, FFFoooooo, FFoo и Fwoo, так как их невозможно целиком разбить на фрагменты, соответствующие атомарному РВ '(Foo)'. Любой подстроке любой длины соответствует выражение '.*'.

Атомарное РВ, после которого стоит повторитель - интервал вида {минимум,максимум}, также атомарное РВ. Ему соответствует подстрока, состоящая из фрагментов, каждый из которых соответствует этому атомарному РВ, при этом количество фрагментов должно быть не меньше минимума и не больше максимума. Например, выражению '(he){2,4}' соответствуют подстроки hehe, hehehe и hehehehe. Если в интервале опущен минимум, он считается равным нулю, а если опущен максимум, он считается равным бесконечности. Например, выражению 'Z{2,}' соответствуют подстроки ZZ, ZZZ, ZZZZ и т. д., а выражению 'w{,3}' - подстроки w, ww и www.

Спецсимволы ^ и $ определяют позицию подстроки в строке. Если в начало РВ вставить ^, ему будут соответствовать те же подстроки, только стоящие в начале строки. Если в конец РВ добавить $, ему будут соответствовать те же подстроки, только стоящие в конце строки. Например, выражение '^U' будет встречаться во всех строках, начинающихся с U, а '!$' - во всех строках, заканчивающихся на !. Таким образом, выражению '^[a-z]{1,}$' будут соответствовать любые строки, состоящие из одних только маленьких латинских букв.

Спецсимвол \ лишает следующий за ним любой спецсимвол специального значения (известная уже нам операция закавычивания). Например, выражению '\.\.\.' соответствует многоточие, а выражению '\$\*' - подстрока $*.

На этом описание базового (basic) регулярного выражения заканчивается. Базовое регулярное выражение соответствует классу регулярных формальных грамматик, и с его помощью можно описывать разнообразные виды подстрок, соответствующие классу регулярных формальных языков (об этом см. [ 24 ] ). Однако в повседневной работе оказалось удобно дополнить базовые правила некоторыми расширениями, с помощью которых можно описывать языки того же класса, но в более компактном виде.

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >
Max Akt
Max Akt

Я прохожу курс "Операционная система Unix" и после тестов, вижу в отчете, что этот тест сдало еще 25 человек. Почему так мало, это ведь реально хороший и полезный урок. Здесь естьи теория и практичесские материалы. Сам курс написан хорошо, живым языком. И здесь я получил ответы на вопросы по Linux, которые боялся спросить. Наверное это из-за того, что в названии курса написано не Linux, а Unix и это многих отпугивает.

Andranik Avakian
Andranik Avakian

41. УК РФ и Комментарии (ст. 273)

М. 2000 г. Издательство: ALT Linux, Институт Логики

Уголовный Кодекс РФ и комментарии к нему?

По ссылке открывается сайт документации Linux, раздел Linux Installation and Getting Started