Просмотров:

Регулярные выражения используются для выполнения поиска совпадений по строке. Некоторые общие примеры регулярных выражений см. в следующих таблицах. Чтобы задать регулярное выражение, добавьте перед шаблоном оператор «.REG.».

В Интернете есть ряд сайтов и учебников, посвященных этой теме. Один из них — это сайт PerlDoc:

http://www.perl.com/doc/manual/html/pod/perlre.html

Внимание:

Регулярные выражения являются высокоэффективным инструментом поиска совпадений строк. По этой причине компания Trend Micro рекомендует администраторам, решившим использовать регулярные выражения, как следует освоить синтаксис регулярных выражений. Плохо написанные регулярные выражения могут оказать сильное отрицательное влияние на производительность. Trend Micro рекомендует начинать с простых регулярных выражений, не использующих сложного синтаксиса. При введении новых правил выполните архивацию и посмотрите, как агент Messaging Security Agent управляет сообщениями с помощью вашего правила. Если вы уверены, что у правила нет непредсказуемых последствий, можете изменить свое действие.

Примеры регулярных выражений

Некоторые общие примеры регулярных выражений см. в следующих таблицах. Чтобы задать регулярное выражение, добавьте перед шаблоном оператор «.REG.».

Табл. 1. Подсчет и группировка

Элемент

Что это означает

Пример

.

Символ точки представляет любой символ, кроме символа начала строки.

Так, «гру.» соответствует словам «груша», «грусть», «группа», «груз» и т. д.

«др.» соответствует «драже», «друг» и т.д.

*

Звездочка (*) заменяет ноль и более повторений предыдущего символа.

Так, «гр*» будет соответствовать «г», «гр», «грр», «гррр», «гррррр» и т. д.

+

Знак «плюс» (+) заменяет одно и более повторений предыдущего символа.

Так, «гр+» будет соответствовать результатам «гр», «грр», «гррр», «гррррр» и т. д., но не будет соответствовать «г».

?

Вопросительный знак (?) заменяет от нуля до одного повторения предыдущего символа.

Так, «гру?ша» будет соответствовать результатам «грша» и «груша», но не будет соответствовать словам «грууша», «груууша» и т. д.

( )

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

Так, «гр(уша)+» будет соответствовать словам «груша», «грушауша», «грушаушауша» и т. д. Знак «+» применяется к подстроке, заключенной в скобки, поэтому регулярное выражение ищет сочетание «гр» со следующим за ним сочетанием «уша» (однократным или многократно повторяющимся).

[ ]

В квадратные скобки заключается набор возможных вариантов символов.

Так, «а[бвгд]+» соответствует сочетаниям «аб», «ав», «аг», «ад», «абв», «адг», «адгб» и т. д. К группе символов внутри квадратных скобок применяется знак «+», поэтому regex ищет «а» со следующими за ним одним или более знаком из группы вариантов [бвгд].

«д[А-Я]» соответствует «дА», «дБ», «дВ» и так далее до «дЯ». Набор в квадратных скобках обозначает диапазон всех прописных букв между А и Я.

[ ^ ]

Знак «^» в квадратных скобках исключает весь указанный диапазон, и в этом случае regex будет искать все знаки, которые не входят в этот диапазон.

«д[^оауем]» соответствует «ды», «др» или «дд», «д9», «д#--д» перед любым одиночным символом за исключением гласной буквы.

{ }

Фигурные скобки задают определенное количество повторений предыдущего элемента. Единственная цифра в скобках значит, что только такое количество повторений будет считаться совпадением. Пара чисел, разделенных запятой, задают диапазон допустимых повторений предыдущего знака. Единственная цифра, за которой стоит запятая, задает диапазон от этого числа до бесконечности: верхней границы нет.

«да{3}» соответствует «дааа--д» перед 3-мя и только 3-мя экземплярами «а». «да{2,4}» соответствует «даа», «дааа», «даааа» (но не «дааааа»)--д перед 2-мя, 3-мя или 4-мя экземплярами «a». «да{4,}» соответствует «даааа», «дааааа», «даааааа» и т. д.--д перед 4-мя экземплярами «а» или более.

Табл. 2. Классы символов (краткая запись)

Элемент

Что это означает

Пример

\d

Любая цифра: эквивалент [0-9] или [[:digit]]

\d соответствует 1, 12, 123 и т. д., но не «1б7»--одна или несколько любых цифр.

\D

Любой знак, не являющийся цифрой: эквивалент [^0-9] или [^[:digit]]

\D соответствует «а», «аб», «аб&», но не «1» — любому одному или нескольким знакам, кроме цифр 0, 1, 2, 3, 4, 5, 6, 7, 8 или 9.

\w

Любая буква или цифра; функционально эквивалентно выражению [_А-Яа-я0-9] или [_[:alnum:]]

\w соответствует «а», «аб», «а1», но не «!&» — т. е. одному или более символам — буквам верхнего или нижнего регистра или цифрам, но не знакам препинания или служебным символам.

\W

Любой символ, отличный от буквы и цифры; функционально эквивалентно выражению [^_А-Я-я0-9] или [^_[:alnum:]]

\W соответствует «*», «&», но не «алло» или «а1» — т. е. одному или более символам, которые не являются буквами или цифрами.

\s

Любое свободное место: пробел, новая строка, табуляция, неразрывный пробел и т. д.; эквивалент [[:space]]

«овощ\и» соответствует слову «овощ» перед символом пробела. Поэтому фаза «Я люблю овощ в супе» найдется по регулярному выражению, а фраза «Я люблю овощи в супе» не найдется.

\S

Любой символ, не являющийся пробелом; эквивалент [^[:space]]

«овощ\И» соответствует слову «овощ» со следующим за словом любым знаком, кроме пробела. Поэтому фраза «Я люблю овощи в супе» найдется по регулярному выражению, а фраза «Я люблю овощ в супе» не найдется.
Табл. 3. Классы символов

Элемент

Что это означает

Пример

[:alpha:]

Любая буква

.REG. [[:alpha:]] соответствует «абв», «где», «ххх», но не 123 и @#$.

[:digit:]

Любая цифра; функционально эквивалентно \d

.REG. [[:digit:]] соответствует 1, 12, 123 и т. д.

[:alnum:]

Любая буква или цифра; функционально эквивалентно \w

.REG. [[:alnum:]] соответствует «абв», 123, но не ~!@.

[:space:]

Любое свободное место: пробел, новая строка, табуляция, неразрывный пробел и т. д.; эквивалент \s

.REG. (vegetable)[[:space:]] соответствует «овощ» перед символом пробела. Поэтому фаза «Я люблю овощ в супе» найдется по регулярному выражению, а фраза «Я люблю овощи в супе» не найдется.

[:graph:]

Любой знак, кроме пробела, управляющих символов и т. п.

.REG. [[:graph:]] соответствует 123, «абв», xxx><”, но не пробелам и не управляющим символам.

[:print:]

Любые знаки (схож с оператором [:graph:]) но включает знак пробела

.REG. [[:print:]] соответствует 123, «абв», xxx ><” и пробелам.

[:cntrl:]

Любые управляющие символы (например CTRL + C, CTRL + X)

.REG. [[:cntrl:]] соответствует 0x03, 0x08, но не «абв», 123, !@#.

[:blank:]

Знаки пробела и табуляции

.REG. [[:blank:]] соответствует символу пробела и символу табуляции, но не 123, «абв», !@#

[:punct:]

Знаки пунктуации

.REG. [[:punct:]] соответствует ; : ? ! ~ @ # $ % «&», «*», «‘», «“» и т. д. но не 123, «абв».

[:lower:]

Любая буква нижнего регистра (Примечание. Параметр «Учитывать регистр» должен быть включен, в противном случае выражение будет функционально эквивалентно [:alnum:]).

.REG. [[:lower:]] соответствует «абв», «Деф», «сТресс», «До» и т. д., но не «АБВ», «ДЕФ», «СТРЕСС», «ДО», 123, !@#.

[:upper:]

Любая буква верхнего регистра (Примечание. Параметр «Учитывать регистр» должен быть включен, в противном случае выражение будет функционально эквивалентно [:alnum:]).

.REG. [[:upper:]] соответствует «АБВ», «ДЕФ», «СТРЕСС», «ДО» и т. д., но не «абв», «Деф», «Стресс», «До», 123, !@#.

[:xdigit:]

Цифры в шестнадцатеричном числе (0-9a-fA-F)

.REG. [[:xdigit:]] соответствует 0a, 7E, 0f и т. д.

Табл. 4. Указатели шаблонов

Элемент

Что это означает

Пример

^

Означает начало строки

^(вопреки) соответствует любому фрагменту текста, который начинается с «вопреки». Так, предложение «вопреки тому, что я люблю овощи в супе» считается совпадением, но «тому, что я люблю овощи в супе, вопреки» — не считается.

$

Означает конец строки.

(вопреки)$ соответствует любому фрагменту текста, который заканчивается словом «вопреки». Так, предложение «вопреки тому, что я люблю овощи в супе» не будет считаться совпадением, но «тому, что я люблю овощи в супе, вопреки» — будет.

Табл. 5. Управляющие последовательности и строковые константы

Элемент

Что это означает

Пример

\

Обозначение некоторых символов, имеющих специальное значение в регулярном выражении (например, «+»).

(1) .REG. C\\C\+\+ соответствует‘C\C++’.

(2) .REG. \* соответствует *.

(3) .REG. \? соответствует ?.

\t

Обозначает знак табуляции.

(стресс)\t соответствует любому текстовому блоку, который содержит подстроку «стресс» сразу перед символом табуляции (ASCII 0x09).

\n

Обозначает начало новой строки.

Прим.:

На разных платформах начало новой строки обозначается по-разному. В Windows это пара знаков — «возврат каретки» и «перевод строки». В Unix и Linux новая строка обозначается только символом перевода строки. В Macintosh новая строка обозначается только символом возврата каретки.

(стресс)\n\n соответствует любому фрагменту текста, в котором содержится подстрока «стресс», сразу за которой следуют два знака начала строки (0x0A в ASCII).

\r

Обозначает возврат каретки.

(стресс)\r соответствует любому текстовому блоку, который содержит подстроку «стресс» сразу перед одним символом возврата каретки (ASCII 0x0D).

\b

Обозначает возврат на один символ со стиранием (backspace).

OR

Обозначает границы.

(stress)\b соответствует любому фрагменту текста, в котором содержится подстрока «stress», сразу за которой следует знак возврата на один символ со стиранием 0x08 в ASCII).

Граница слова (\b) — это место между двумя символами, с одной стороны которого находится \w, а с другой — \W (в любом порядке), отсчитывая предполагаемые символы с начала или конца сроки как соответствующие \W (среди классов символов \b чаще обозначает backspace, чем границу слова).

Например, следующее регулярное выражение может соответствовать номеру социальной страховки: .REG. \b\d{3}-\d{2}-\d{4}\b

\xhh

Обозначение символа ASCII с заданным шестнадцатеричным кодом (где hh обозначает двузначное шестнадцатеричное число).

\x7E(\w){6} соответствует любому фрагменту текста, в котором содержится ровно шесть буквенно-цифровых символов, перед которыми стоит тильда («~»). Поэтому находятся слова «~аб12вг», «~Ра3499», но не «~упс».

Генератор регулярных выражений

При определении параметров настройки правил для функции предотвращения потери данных имейте в виду, что генератор регулярных выражений может создавать только простые выражения в соответствии со следующими правилами и ограничениями.

  • Переменными могут быть только буквы и цифры.

  • Все остальные символы, такие как [-], [/] и так далее, могут быть только постоянными.

  • Диапазоны переменных могут составлять только A-Z и 0-9; нельзя ограничивать диапазоны, например до A-D.

  • В регулярных выражениях, создаваемых этим инструментом, учитывается регистр.

  • Регулярные выражения, созданные при помощи данного средства, используются для поиска только положительных совпадений, но не отрицательных («если не совпадает»).

  • Выражения на основе образца могут совпасть только с точно таким же количеством символов и пробелов, как и в образце. При помощи данного средства нельзя создавать шаблоны для поиска совпадения с «одним и более» из указанных символов или строк.

Сложный синтаксис выражений

Выражение с ключевым словом состоит из знаков — наименьших единиц сопоставления выражения с содержимым. Знак может быть оператором, логическим символом или операндом, то есть аргументом или значением, с которым работает оператор.

В число операторов входят .AND., .OR., .NOT., .NEAR., .OCCUR., .WILD., «.(.» и «.).». Операнд и оператор должны быть разделены пробелом. Кроме того, операнд может включать несколько знаков. См. Ключевые слова.

Использование регулярных выражений в работе

Следующий пример описывает работу фильтра по содержимому страховки, одного из фильтров по умолчанию.

[Format] .REG. \b\d{3}-\d{2}-\d{4}\b

Вышеуказанное выражение использует \b, символ возврата, за которым следует \d, любая цифра, затем {x}, обозначающий количество цифр, и, наконец, знак «-», обозначающий дефис. Этому выражению соответствует номер социального страхования. Нижеприведенная таблица описывает строки, соответствующие данному регулярному выражению.

Табл. 6. Числа, соответствующие регулярному выражению номера социального страхования

.REG. \b\d{3}-\d{2}-\d{4}\b

333-22-4444

Совпадения

333224444

Несовпадение

333 22 4444

Несовпадение

3333-22-4444

Несовпадение

333-22-44444

Несовпадение

При изменении выражения, как описано ниже,

[Format] .REG. \b\d{3}\x20\d{2}\x20\d{4}\b

новое выражение соответствует следующей последовательности:

333 22 4444