| |
В LEX-программе регулярные выражения используются для определения лексем. (Кроме того, регулярные выражения широко используются при описании синтаксиса команд в разделах помощи UNIX-систем). Ниже приводится полное описание регулярных выражений применительно к LEX.
Регулярное выражение может содержать буквы латинского и русского алфавитов
в верхнем и нижнем регистрах, цифры, знаки препинания и т.д. (литеральные
символы), а также символы-операторы (метасимволы). Кроме того, в регулярных
выражениях можно использовать управляющие символы потока stdout языка
Си, например:
\восьмеричный код - указание символа его восьмеричным
кодом;
\xшестнадцатеричный код - указание символа его шестнадцатеричным
кодом;
\n - символ новой строки;
\t - символ табуляции;
\b - возврат курсора на один шаг назад.
В данном разделе понятие ``символ'' используется в смысле языка программирования Си, т.е. подразумевается прежде всего литеральный символ. Операторы позволяют расширить возможности для описания цепочек символов. Регулярные выражения допускают использование операций конкатенации, т.е., ``стыковки'' друг с другом. Если в выражении используется символ пробела и он не находится внутри квадратных скобок, то его необходимо экранировать по правилам, описанным ниже, так как пробел и табуляция используются в качестве разделителей внутри LEX-программы.
Операторы обозначаются символами-операторами, к которым относятся:
\ "" . [] - * + / | ? $ ^ {} <> ()
Каждый из этих символов или пар скобок в регулярном выражении играет
свою роль:
\ и "" - операторы экранирования.
Используются для отмены специального значения символа, обозначающего
оператор, либо последовательности таких символов.
\c - отменяет специальное значение символа c. В общем
случае c может быть любым символом (в том числе и ),
кроме цифры и скобки (т.е. специальное значение скобок таким способом
отменить нельзя).
"сс" - отменяет специальное значение последовательности
символов c. В общем случае в двойные кавычки можно заключать любую
последовательность символов, но специальное значение
таким способом отменить нельзя.
abc+ ,где + является символом-оператором, а в выражении
abc\+
специальное значение + отменяется.
[] - оператор выделения символа из определенного класса. Используется
для определения вхождения одного любого символа из числа заключенных
в квадратные скобки. Заключение символа в квадратные скобки также
выполняет роль экранирования. Квадратные скобки внутри квадратных
скобок также теряют свой специальный смысл.
[xy] - означает вхождение либо символа x, либо символа y.
[x-z] - означает вхождение любого символа из лексикографически
упорядоченной последовательности от x до z.
[A-z]
[+-0-9]
x* - означает любое (в том числе и нулевое) число вхождений символа
x.
x+ - означает одно и более вхождений символа x.
[A-z]*
[A-ZА-Яa-zа-я0-9]*
[A-z]+
/, |, ?, $, ^ - операторы выбора. Управляют процессом
выбора символов.
x/y - означает, что вхождение x учитывается только тогда, когда за
ним следует y.
x? - означает необязательность вхождения символа x.
x$ - означает учет вхождения символа x, если он является последним
в строке (cтоит перед символом n).
^x - означает учет вхождения символа x, если он является
первым символом строки.
[^x] - означает вхождение любого символа, кроме
x. Внутри квадратных скобок ^ должен обязательно
стоять первым.
_?[A-Za-z]*
-?[0-9]+
^[A-Z]
{} - оператор имеет два различных применения:
x{n,m} - означает от n до m вхождений x (здесь n и m натуральные,
m > n).
{имя} - означает, что вместо имени в данное место выражения будет
подставлено определение имени из области определений LEX-программы.
a{2,7}
<> - оператор используется для учета состояния ЛА при определении
вхождений.
<состояние>x - означает учет вхождения x, если ЛА находится в положении
"состояние".
() - оператор изменения группировки регулярного выражения. Все перечисленные
выше операторы имеют соответствующим образом определенные приоритеты.
Заключение в круглые скобки позволяет необходимым способом изменить
приоритеты для правильного описания входной информации.
+,
/, |, ?, , <> и (), принято называть расширенными регулярными
выражениями.
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |