传输规则中的正则表达式

 

适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

上一次修改主题: 2009-04-09

本主题说明如何实现可以按传输规则与谓词一起使用的正则表达式。根据条件和例外来使用谓词,确定是否应将所配置的一项或多项操作应用于电子邮件。

有关传输规则的详细信息,请参阅传输规则概述

什么是正则表达式?

首先,必须了解什么是简单表达式。“简单表达式”给出希望与某个条件或例外匹配的特定值。组织不希望在组织以外分发的文档的标题就是简单表达式的一个示例。电子邮件中的一部分数据只有与简单表达式完全匹配,才能满足传输规则中的条件或例外。

“正则表达式”是一种简洁而灵活的表示法,可用于查找邮件中的文本模式。该表示法由以下两种基本字符类型组成:正常的文字文本字符,用于表示目标字符串中必须存在的文本;元字符,用于表示或控制在目标字符串中该文本可以怎样变化。可以使用正则表达式快速分析电子邮件,以查找特定的字符模式。

利用这种在电子邮件中查找文本模式的能力,您可以将谓词与邮件中可以动态更改的数据进行匹配。这种数据的示例包括社会保险号 (SSN) 和专利号。由于简单表达式要求您输入要检测的值的每种变体,因此无法使用简单表达式来正确匹配此数据。通过使用正则表达式,可以配置谓词来搜索邮件中的 SSN 或专利号模式。

除“是送达报告”以外的任何条件或例外规则谓词,都可以使用正则表达式。有关哪些谓词接受正则表达式模式匹配的详细信息,请参阅传输规则谓词

实现正则表达式

在 Exchange 管理外壳中,可以在接受 Patterns 谓词属性的任何谓词中使用正则表达式。在 Exchange 管理控制台中,正则表达式可以与包含单词“with text patterns”的任何条件或例外一起使用。表 1 列出了可用于创建模式匹配正则表达式的所有模式字符串。

Caution警告:
必须小心测试所构造的正则表达式,以确保它们会产生所需的结果。配置错误的正则表达式会产生意外的匹配,并导致不必要的传输规则行为。应先在测试环境中对正则表达式进行测试,然后才能将其用于生产环境。

表 1   模式字符串

模式字符串 说明

\S

\S 模式字符串将与任何非空格的单个字符匹配。

\s

\s 模式字符串将与任何单个空白字符匹配。

\D

\D 模式字符串将与任何非数值数字匹配。

\d

\d 模式字符串将与任何单个数值数字匹配。

\w

\w 模式字符串将与归类为字母或十进制数字的任何单个 Unicode 字符匹配。

|

管道 (|) 字符将执行 OR 功能。

*

通配符(*)字符将与零或多个上述字符匹配。例如,ab*c 将与下列字符串匹配: ac, abc, abbbbc.

( )

圆括号充当分组分隔符。例如,a(bc)* 将与下列字符串匹配:aabcabcbcabcbcbc 等。

\

反斜线 (\) 是转义字符,与特殊字符一起使用。特殊字符包括下列在模式字符串中使用的字符:

  • 反斜线: \

  • 竖线: |

  • 星号: *

  • 左圆括号: (

  • 右圆括号: )

  • 插入符号: ^

  • 美元符号: $

例如,如果要匹配的字符串包含 (525),则应键入 \(525\)。

\\

在需要将反斜杠字符识别为反斜线而非转义字符时,请使用两个反斜线。例如,如果要匹配的字符串包含 \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

详细信息

有关每个命令的详细语法和参数信息,请参阅下列主题:

有关传输规则的详细信息,请参阅下列主题: