传输规则中的正则表达式

 

适用于: Exchange Server 2010 SP2, Exchange Server 2010 SP3

上一次修改主题: 2016-03-18

可以在 MicrosoftExchange Server 2010 传输规则谓词中使用正则表达式以匹配邮件不同部分(如邮件头、发件人、收件人、邮件主题和正文)中的文本模式。根据条件和例外来使用谓词,确定是否应将所配置的操作应用于电子邮件。

注释注意:
由于客户环境存在着差异,所以 Microsoft 客户支持服务 (CSS) 无法参与自定义正则表达式脚本(“RegEx 脚本”)的开发或测试。对于 RegEX 自定义脚本的开发、测试和调试,Office 365 客户将需要依靠内部 IT 资源。此外,Office 365 客户可以选择使用外部咨询资源,如 Microsoft 咨询服务 (MCS)。无论脚本开发资源是什么,CSS EXO 和 EOP 支持工程师都不得帮助客户自定义 RegEx 脚本查询。

要查找与传输规则相关的管理任务吗?请参阅管理传输规则

内容

简单表达式与正则表达式

Exchange 2010 中的正则表达式

创建使用正则表达式的传输规则

简单表达式与正则表达式

要了解正则表达式,首先必须了解简单表达式。“简单表达式”是要完全在邮件中匹配的特定值。使用简单表达式的谓词匹配特定词语或字符串。简单表达式的一个示例是组织不希望在组织以外分发的文档的标题,比如每年的销售额 Forecast.doc。电子邮件中的一部分数据只有与简单表达式完全匹配,才能满足传输规则中的条件或例外。

“正则表达式”是一种简洁而灵活的表示法,可用于查找邮件中的文本模式。该表示法由以下两种基本字符类型组成:

  • 文字字符   目标字符串中必须存在的文本。键入后,这些字符都是正常的字符。

  • 元字符   一个或多个不按字面意思解释的特殊字符。这些字符表示在目标字符串中该文本可以怎样变化。

可以使用正则表达式快速分析电子邮件,以查找特定的文本模式。这样做可以检测具有特定内容类型的邮件,如社会保险号 (SSN)、专利号和电话号码。

由于简单表达式要求您输入要检测值的每种可能的变体,因此无法使用简单表达式来正确匹配此数据。在许多情况下,对此类应用程序使用简单表达式已成为一项挑战,而在邮件内容中匹配大量简单表达式可能非常耗费资源。通常情况下,使用正则表达式会更有效。为了搜索文本模式,您可以配置传输规则谓词,而不是指定所有可能的变体。

Exchange 2010 中的正则表达式

在 Exchange 命令行管理程序中,可以在接受 Patterns 谓词属性的任何谓词中使用正则表达式。在 Exchange 管理控制台中,正则表达式可以与包含单词“with text patterns”的任何条件或例外一起使用。有关谓词的详细信息,请参阅传输规则谓词

小心警告:
必须小心测试所构造的正则表达式,以确保它们会产生所需的结果。配置错误的正则表达式会产生意外的匹配,并导致不必要的传输规则行为。这样可能会导致对邮件和邮件内容采取不需要的操作,从而在使用诸如拒绝或退回邮件这样的操作时,可能会导致数据损失。另外,复杂的正则表达式可能会影响邮件传输性能。应先在测试环境中对正则表达式进行测试,然后才能将其用于生产环境。

下表列出了可用于在 Exchange 2010 中创建模式匹配正则表达式的所有模式字符串。

模式字符串

模式字符串 说明

\S

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

\s

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

\D

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

\d

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

\w

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

\W

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

|

竖线 (|) 字符将执行 OR 功能。

*

星号 (*) 字符将与零个或多个上述字符匹配。例如,ab*c 将与下列字符串匹配:acabcabbbbc

( )

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

\

反斜线是用作特殊字符前的转义字符。特殊字符是在模式字符串中使用的字符:

  • 反斜杠 (\)

  • 竖线 (|)

  • 星号 (*)

  • 左圆括号 (()

  • 右圆括号 ())

  • 脱字号 (^)

  • 美元符号 ($)

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

^

脱字号 (^) 字符表示该脱字号后面的模式字符串必须存在于所匹配的文本字符串的开头。

例如,^fred@contoso fred@contoso.com fred@contoso.co.uk 匹配,但不与 alfred@contoso.com 匹配。

$

美元符号 ($) 字符表示前面的模式字符串必须存在于要匹配的文本字符串的末尾。

例如,contoso.com$adam@contoso.com kim@research.contoso.com 匹配,但不与 kim@contoso.com.au 匹配。

构造正则表达式

通过使用上表,可以构造出与要匹配的数据模式相匹配的正则表达式。请从左到右在要匹配的数据中检查每个字符或字符组。阅读每个模式字符串的说明,确定如何将其应用于要匹配的数据。随后确定该表中的哪个模式字符串表示该字符或字符组,并将该模式字符串添加到正则表达式中。完成后,您可以得到一个完整构造的正则表达式。

此正则表达式的示例与格式为 425 555-0100 和 425.555.0100 的北美电话号码匹配。

425(\s|.)\d\d\d(-|.)\d\d\d\d

通过添加在区域代码前后使用圆括号的电话格式 (425) 555-0100,可以扩展此示例。此正则表达式的示例与所有的三个电话号码格式匹配。

\d\d\d((\s|.|-|\)|\)\s)\d\d\d(\s|.|-)\d\d\d\d

可以按如下所示分析上面的示例:

  • \d\d\d   此部分要求首先确切地出现三个数值数字。

  • ((\s|.|-|\)|\)\s)   此部分要求在三位数字后或者出现空格,或者出现句点,或者出现连字号。每个字符匹配的字符串都包含在分组分隔符中,并被管道字符分隔。这表示在要匹配的字符串的此位置上,只能存在一个分组分隔符内指定的字符。如果要分隔区域代码和随后的三个数字,则还将查找右圆括号,或右圆括号和空格。

  • \d\d\d   此部分要求接下来会确切出现三个数值数字。

  • (\s|.|-)   此部分要求在三位数字后或者出现空格,或者出现句点,或者出现连字号。

  • \d\d\d\d   此部分要求接下来会确切出现四个数值数字。

上述正则表达式将与以下示例值匹配:

  • (425)555.0100

  • 425 555 0100

  • 425. 555-0100

  • (425) 555-0100

  • 425-555-0100

  • (425) 555-0100

创建使用正则表达式的传输规则

本示例通过命令行管理程序创建一个使用正则表达式匹配电子邮件主题中的 SSN 的传输规则。

New-TransportRule -Name "Social Security Number Block Rule" -SubjectOrBodyMatchesPatterns '\d\d\d-\d\d-\d\d\d\d' -RejectMessageEnhancedStatusCode "5.7.1" -RejectMessageReasonText "This message has been rejected because of content restrictions" 

本示例允许您查看新的传输规则。

Get-TransportRule "Social Security Number Block Rule" | Format-List

 © 2010 Microsoft Corporation。保留所有权利。