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

Дополнительные сведения о правилах транспорта см. в разделе Обзор правил транспорта.

Определение регулярных выражений

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

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

Возможность поиска шаблонных элементов текста в сообщении электронной почты позволяет сопоставлять предикаты с данными в сообщениях, которые могут динамически меняться. Примеры таких данных — номера социального страхования и номера патентов. Такие данные нельзя логично сопоставить с простым выражением, так как в простом выражении требуется вводить каждый вариант нужного значения. С использованием регулярных выражений можно настроить предикат для поиска в сообщении шаблонных номеров социального страхования или номеров патентов.

Регулярные выражения можно использовать в любом предикате правила условия или исключения, кроме предиката «это отчет о доставке». Дополнительные сведения о том, какие предикаты допускают применение регулярных выражений с шаблонами, см. в разделе Предикаты правил транспорта.

Внедрение регулярных выражений

В среде управления Exchange можно использовать регулярные выражения в любом предикате, который принимает свойство предиката Patterns. В консоли управления Exchange можно использовать регулярные выражения с любым условием или исключением, которое содержит слова с шаблонами текста. В табл. 1 перечисляются все строки шаблонов, которые можно использовать для создания регулярного выражения с шаблонами.

Внимание!
Необходимо тщательно проверять созданные регулярные выражения, чтобы убедиться, что их применение даст ожидаемый результат. Неправильное регулярное выражение может привести к неожиданным совпадениям и вызвать нежелательное поведение правила транспорта. Регулярные выражения следует проверять в лабораторной среде до их внедрения в производство.

Таблица 1.   Строки шаблонов

Строка шаблона Описание

\S

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

\s

Строка шаблона \s соответствует единичному символу пробела.

\D

Строка шаблона \D соответствует любой цифре, которая не является числом.

\d

Строка шаблона \d соответствует любой одной цифре.

\w

Строка шаблона \w соответствует любому символу Юникода, который не является буквой или цифрой.

|

Вертикальная черта (|) выполняет функцию операции ИЛИ.

*

Подстановочный знак (*) соответствует отсутствию предыдущего символа или одному либо нескольким его вхождениям. Например, ab*c соответствует следующим строкам: ac, abc, abbbbc.

( )

Скобки выступают в роли группирующего разделителя. Например, a(bc)* соответствует следующим строкам: a, abc, abcbc, abcbcbc и так далее.

\

Обратная косая черта (\) является escape-символом, который используется вместе со специальным символом. Специальные символы — это приведенные ниже символы, которые используются в строках шаблона.

  • Обратная косая черта: \

  • Вертикальная черта: |

  • Звездочка: *

  • Открывающая скобка: (

  • Закрывающая скобка: )

  • «Крышка»: ^

  • Доллар: $

Например, если нужно найти строку, которая содержит (525), следует указать \(525\).

\\

Если нужно, чтобы символ обратной косой черты распознавался как таковой, а не как escape-символ, следует ввести две косые черты. Например, если нужно найти строку, которая содержит \d, следует указать \\d.

^

Символ «крышка» (^) указывает, что следующая за этим символом строка шаблона должна располагаться в начале сопоставляемой текстовой строки. Например, ^fred@contoso соответствует fred@contoso.com и fred@contoso.co.uk, но не alfred@contoso.com.

Этот символ может использоваться также в сочетании с символом доллара ($). В этом случае он указывает, что требуется точное соответствие строке. Например, ^kim@contoso.com$ соответствует только kim@contoso.com и никакой другой строке, в частности, не соответствует строке kim@contoso.com.au.

$

Символ доллара ($) указывает, что предыдущая строка шаблона должна находиться в конце сопоставляемой текстовой строки. Например, contoso.com$ соответствует adam@contoso.com и kim@research.contoso.com, но не kim@contoso.com.au.

Этот символ также может использоваться в сочетании с символом «крышка» (^). В этом случае он указывает, что требуется точное соответствие строке. Например, ^kim@contoso.com$ соответствует только kim@contoso.com и никакой другой строке, в частности, не соответствует строке chris@sales.contoso.com.

С помощью табл. 1 можно создать регулярное выражение, которое соответствует нужному шаблону данных. В порядке следования слева направо изучите отдельные символы или группы символов в данных, которые нужно сопоставить. Прочтите описание каждой из строк шаблона, чтобы определить, как он будет применяться к сопоставляемым данным. Затем определите, какая строка из приведенных в табл. 1 соответствует данному символу или группе символов, и добавьте ее в регулярное выражение. По завершению этой работы будет получено полностью готовое регулярное выражение.

Например, следующее регулярное выражение соответствует телефонным номерам в Северной Америке в форматах 425 555-0100 и 425.555.0100:

Копировать код
425(\s|.)\d\d\d(-|.)\d\d\d\d

Можно развернуть этот пример, добавив формат телефонного номера (425) 555-0100, в котором код региона заключен в скобки. Следующее регулярное выражение соответствует всем трем форматам телефонных номеров:

Копировать код
(\\()*\d\d\d(\\)|\s|.)\d\d\d(-|.)\d\d\d\d

Разберем приведенный выше пример:

  • (\\()* — эта часть строки делает первую скобку необязательной. Поскольку закрывающая скобка также является разделителем регулярного выражения, ее следует пропустить; для этого служит двойная обратная косая черта \\. Группа скобок (()) группирует символы \\(, поэтому подстановочный знак * может действовать в отношении символов \\( , делая их необязательными.

  • \d\d\d — эта часть строки соответствует трем цифрам, которые должны следовать в строке.

  • (\\)|\s|.) — эта часть строки указывает на то, что за последовательностью из трех чисел должны следовать открывающая скобка, пробел или точка. Каждая строка сопоставления символов заключена в группирующие разделители и отделена вертикальной чертой. Это означает, что в образованной разделителями группе в данном месте сопоставляемой строки может находиться только один из указанных символов.

  • \d\d\d — эта часть строки соответствует трем цифрам, которые должны следовать в строке.

  • (-|.) — эта часть строки требует наличия дефиса или точки после трех цифр. Так как дефис и точка заключены в группирующие разделители, в указанном месте сопоставляемой строки может стоять только один из этих двух символов.

  • \d\d\d\d — эта часть строки требует наличия четырех цифр.

Пример правила транспорта, в котором используется регулярное выражение

В следующем примере демонстрируется, как использовать регулярные выражения при создании нового правила в среде управления Exchange:

Чтобы создать правило транспорта, в котором используются регулярные выражения для сопоставления с номерами социального страхования в теме сообщения электронной почты
  1. Выполните следующие команды:

    Копировать код
    $Condition = Get-TransportRulePredicate SubjectMatches
    $Condition.Patterns = @("\d\d\d-\d\d-\d\d\d\d")
    $Action = Get-TransportRuleAction RejectMessage
    $Action.RejectReason = "The transmission of Social Security Numbers is prohibited."
    New-TransportRule -Name "Social Security Number Block Rule" -Conditions $Condition -Actions $Action 
    
  2. Выполните следующую команду, чтобы просмотреть новое правило транспорта:

    Копировать код
    Get-TransportRule "Social Security Number Block Rule" | Format-List
    

При выполнении команды Get-TransportRule отображаются следующие сведения:

Копировать код
Identity		 : Social Security Number Block Rule,753ed939-1227-4b2a-a8e0-ec49b0615f30
Name			 : Social Security Number Block Rule
RuleCollectionName : Transport
Priority		 : 0
Comments		 :
ManuallyModified   : False
Conditions		 : {SubjectMatches}
Exceptions		 :
Actions			: {RejectMessage}
State			: Enabled
IsValid			: True
ObjectState		: Unchanged

Дополнительные сведения