Переход:  Безопасность > Фильтр содержания и АнтиВирус > Редактор фильтров содержания > Правила >

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

Печать этого раздела Пред. страницаК началу разделаCлед. страница

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

Что такое регулярные выражения?

Регулярное выражение (regexp - regular expression) – это текстовый шаблон, состоящий из комбинации специальных символов, которые еще называют метасимволы (metacharacters) и буквенно-цифровых текстовых символов, или «литер» (literals) (abc, 123 и т.д.). Шаблон используется для сравнения текстовых строк - результат сравнения будет либо успешным, либо нет. Регулярные выражения используются в основном для поиска и замены повторяющихся фрагментов текста.

Метасимволы – это специальные символы, имеющие особые функции и используемые внутри регулярных выражениях. Реализация механизма регулярных выражений в системе фильтрации содержания MDaemon допускает следующие метасимволы:

\ | () [] ^ $ * + ? . <>

Метасимвол

Описание

\

При использовании перед метасимволом, обратная косая («\») заставляет обрабатывать этот метасимвол, как литеру. Это необходимо, если вы хотите искать один из специальных символов, уже используемых в качестве метасимволов. Например, для поиска «+» ваше выражение должно содержать «\+».

|

Символ дизъюнкции (еще называется «или», либо «вертикальная черта») используется, когда вы хотите, чтобы целевая строка соответствовала любому из выражений, разделенных этим символом. При поиске текстовой строки регулярное выражение «abc|xyz» будет совпадать с любыми вхождениями строк «abc» и «xyz».

[...]

Заключенный в квадратные скобки («[» и «]») набор символов означает, что любой символ из этого набора может совпадать с искомой текстовой строкой. Тире («-») между символами в квадратных скобках обозначает диапазон символов. Например, поиск в строке «abc» с помощью регулярного выражения «[a-z]» принесет три совпадения: "a", "b" и "c". Использование выражения «[az]» принесет только одно совпадение: "a".

^

Обозначает начало строки. В целевой строке «abc ab a» выражение «^a» даст одно совпадение — первый символ целевой строки. Регулярное выражение «^ab» тоже даст одно совпадение — первые два символа целевой строки.

[^...]

Символ вставки («^»), следующий сразу за левой квадратной скобкой («[»), имеет иное значение. Он используется для исключения остальных заключенных в скобки символов из совпадения с целевой строкой. Выражение «[^0-9]» указывает, что целевой символ не должен быть цифрой.

(...)

Круглые скобки указывают порядок обработки шаблона, а также выступают в качестве помеченного (tagged) выражения, которое можно использовать в выражениях поиска и замены.

Результаты поиска с помощью регулярного выражения временно сохраняются и могут быть использованы в выражении замены для построения нового выражения. В выражении замены (replace) вы можете включить символ «&» или «\0», который будет заменен подстрокой, найденной регулярным выражением в результате поиска. Итак, если выражение поиска (search) «a(bcd)e» находит совпадение подстроки, то выражение замены (replace) «123-&-123» или «123-\0-123» заменит совпадающий текст на строку «123-abcde-123».

Точно так же вы можете использовать в выражении замены спецсимволы «\1», «\2», «\3» и т.д. Эти символы будут заменены только результатами помеченных (tagged) вместо полных совпадающих подстрок. Число, следующее за символом «\\», показывает, на какое помеченное выражение вы ссылаетесь (если регулярное выражение содержит более одного помеченного выражения). Например, если вы используете выражение поиска «(123)(456)» и выражение замены «a-\2-b-\1», то совпадающая подстрока будет заменена на «a-456-b-123», а выражение замены «a-\0-b» будет заменено на «a-123456-b».

$

Символ доллара («$») обозначает конец строки. В текстовой строке «13 321 123» выражение «3$» будет иметь одно совпадение - последний символ в строке. Выражение «123$» также будет иметь одно совпадение — последние три символа целевой строки.

*

Квантор «звездочка» («*») означает, что символ слева от него должен совпадать с нулем или более вхождений этого символа в ряду. То есть, шаблону «1*abc» будут соответствовать и текст «111abc», и «abc».

+

Близкий по значению квантору «звездочка», квантор «+» означает, что символ слева от него должен совпадать с одним или более вхождений этого символа в ряду. То есть, шаблону «1+abc» будет соответствовать текст «111abc», но не «abc».

?

Квантор «знак вопроса» («?») показывает, что символ слева от него должен встречаться ноль или один раз. Таким образом, выражение «1?abc» будет совпадать с «abc», а также будет совпадать с подстрокой «1abc» из строки «111abc».

.

Метасимвол точка («.») совпадает с любым символом. Так, «.+abc» будет совпадать с «123456abc», а «a.c» будет совпадать с «aac», «abc», «acc» и т.д.

Допустимые условия и действия

Регулярные выражения можно использовать в любых Условиях правил фильтрации Заголовков. Например, в любом правиле, где используется условие «if the FROM HEADER contains». Регулярные выражения также можно использовать в условии «if the MESSAGE BODY contains».

Регулярные выражения можно использовать в двух видах Действий в правилах Фильтра содержания: "“Search and Replace Words in a Header” (Поиск и замена слов в заголовке) и “Search and Replace Words in the Message Body” (Поиск и замены слов в теле письма).

Регулярные выражения, используемые в условиях правил Фильтра содержания, являются регистро-независимыми. Регистр символов не учитывается.

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

Конфигурирование Регулярного выражения в Условии Правила

Чтоб сконфигурировать использование регулярного выражения в условии на заголовок или тело сообщения:

1. В диалоге создания правил включите опцию, связанную с условием на заголовок или тело сообщения, которое вы хотите вставить в свое правило.
2. В поле описания внизу диалога создания правил щелкните на ссылке “contains specific strings” (содержит определенные строки), связанной с условием, выбранным на шаге 1. Откроется диалог «Укажите текст для поиска».
3. Щелкните ссылку “contains” (содержит) в области «Строки, указанные в данный момент...».
4. Выберите в выпадающем списке пункт “Matches Regular Expression” (Совпадает с регулярным выражением) и нажмите кнопку OK.
5. Если вам нужна помощь при составлении регулярного выражения, или вы хотите протестировать его, нажмите кнопку «Проверить регулярное выражение». Если вам не нужно использовать диалог «Проверить регулярное выражение», введите свое регулярное выражение в предоставленное поле ввода, нажмите кнопку «Добавить», а затем перейдите к шагу 8.
6. Введите ваше регулярное выражение в поле «Поиск выражения». Чтобы упростить этот процесс, мы предоставили меню, которое можно использовать для быстрой вставки определенных метасимволов в ваше регулярное выражение. Для доступа к этому меню нажмите кнопку «>». Когда вы выбираете опцию из этого меню, в выражение будет вставлен соответствующий метасимвол, а точка вставки в тексте будет перемещена на соответствующее место, требуемое этим символом.
7. Введите в текстовое поле любой текст, который вы хотите использовать для тестирования вашего выражения, затем нажмите кнопку «Тест». Когда вы закончите тестировать ваше выражение, нажмите «OK».
8. Нажмите кнопку OK.
9. Продолжите создание вашего правила в обычном порядке.

Конфигурирование Регулярного выражения в Действии Правила

Чтоб сконфигурировать использование регулярного выражения в действии «Search and Replace Words in…» (Поиск и замена слов в…):

1. В диалоге создания правил включите опцию, связанную с действием «Search and Replace Words in…», которое вы хотите вставить в свое правило.
2. В поле описания внизу диалога создания правил щелкните на ссылке “specify information” (указать информацию), связанной с условием, выбранным на шаге 1. При этом откроется диалог «Поиск и замена».
3. Если на шаге 1 вы выбрали действие «Search…header», то используйте выпадающий список для выбора заголовка, который вы хотите искать, или введите заголовок в поле, если его нет в приведенном списке. Если вы не выбирали действие "Search...header" на шаге 1, пропустите этот шаг.
4. Введите выражение поиска, которое вы хотите использовать в этом действии. Чтобы упростить этот процесс, мы предоставили меню, которое можно использовать для быстрой вставки определенных метасимволов в ваше регулярное выражение. Для доступа к этому меню нажмите кнопку «>». Когда вы выбираете опцию из этого меню, в выражение будет вставлен соответствующий метасимвол, а точка вставки в тексте будет перемещена на соответствующее место, требуемое этим символом.
5. Введите выражение замены, которое вы хотите использовать в этом действии. Как и для выражения поиска, здесь мы тоже предоставили меню быстрого выбора метасимволов. Оставьте это поле пустым, если вы хотите удалить найденную подстроку, а не заменить ее другим текстом.
6. Поставьте флажок в поле «С учетом регистра», если хотите, чтобы выражение было чувствительно к регистру.
7. Включите опцию «Регулярные выражения», если хотите, чтобы строки поиска и замены рассматривались, как регулярные выражения. В ином случае каждая из них будет обработана, как простая подстрока поиска и замены — это будет выглядеть, как точное совпадение символов, а не как обработка регулярного выражения.
8. Если вам не нужно тестировать ваше выражение, пропустите этот шаг. Если вы хотите протестировать работу выражения, нажмите «Запустить тест». В диалоге «Тестирование поиска и замены» введите свои выражения поиска и замены, а также текст, с которым вы хотите их проверить, затем нажмите «Тест». Когда вы закончите тестировать свои регулярные выражения, нажмите «OK».
9. Нажмите кнопку OK.
10. Продолжите создание вашего правила в обычном порядке.

Реализация механизма регулярных выражений в MDaemon использует библиотеку PCRE (PERL Compatible Regular Expression). Дополнительную информацию об этой реализации регулярных выражений можно найти по адресам: http://www.pcre.org/ и http://perldoc.perl.org/perlre.html.

Всесторонний обзор регулярных выражений можно найти в книге: Mastering Regular Expressions, Third Edition, опубликованной издательством O'Reilly Media, Inc.