トランスポート ルールの正規表現

 

適用先: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

トピックの最終更新日: 2009-04-09

ここでは、トランスポート ルールで述語と共に使用可能な正規表現の実装について説明します。述語は、1 つ以上の構成済みのアクションを電子メール メッセージに適用する必要があるかどうかを判断するために、条件および式で使用されます。

トランスポート ルールの詳細については、「トランスポート ルールの概要」を参照してください。

正規表現について

最初に、単純表現について理解しておく必要があります。単純表現は、条件または式と一致させる必要のある特定の値を表します。単純表現の例として、組織が組織の外部に配布されることを望まないドキュメントのタイトルがあります。トランスポート ルール内の条件または式を満たすには、電子メール メッセージ内の各データが単純表現と正確に一致する必要があります。

正規表現とは、メッセージ内のテキストのパターンを検出するための簡潔で柔軟な表記法です。この表記法は、対象の文字列内に存在する必要のあるテキストを示すリテラル (通常の) テキスト文字と、対象の文字列内のテキストの許容可能な変動範囲を指定または制御するメタ文字の、2 つの基本的な文字の種類で構成されます。正規表現を使用すると、電子メール メッセージをすばやく解析し、特定の文字パターンを検出することができます。

電子メール メッセージ内のテキストのパターンを検出する機能により、動的に変化する可能性があるメッセージ内のデータと述語を一致させることが可能になります。このようなデータの例として、社会保障番号 (SSN) や特許番号があります。単純表現では、検出する値のすべてのバリエーションを入力する必要があるため、このデータを単純表現で正確に一致させることはできません。正規表現を使用することにより、メッセージ内の SSN や特許番号のパターンを検索するための述語を構成できます。

正規表現は、"配信レポートの場合" 以外の任意の条件または例外ルール述語で使用できます。正規表現のパターン マッチングを受け付ける述語の詳細については、「トランスポート ルールの述語」を参照してください。

正規表現の実装

Exchange 管理シェルでは、Patterns 述語プロパティを受け付ける任意の述語で正規表現を使用できます。Exchange 管理コンソールでは、"テキスト パターンが含まれる場合" という文字列を含む任意の式または例外ルールと共に正規表現を使用できます。表 1 は、パターン マッチング正規表現を作成するために使用できるすべてのパターン文字列の一覧です。

Caution注意 :
作成した正規表現を慎重にテストして、予期された結果が生成されることを十分確認する必要があります。正規表現を誤って構成すると、予期しない一致が発生したり、不要なトランスポート ルールの動作が生じたりする場合があります。正規表現を運用環境に実装する前に、テスト環境でテストするようにしてください。

表 1   パターン文字列

パターン文字列 説明

\S

\S パターン文字列は、スペース以外の任意の 1 文字と一致します。

\s

\s パターン文字列は、任意の 1 つのスペース文字と一致します。

\D

\D パターン文字列は、数値以外の任意の桁数と一致します。

\d

\d パターン文字列は、任意の 1 つの数値の桁数と一致します。

\w

\w パターン文字列は、文字または数値として分類される 1 つの Unicode 文字と一致します。

|

パイプ (|) 文字は、OR 機能を実行します。

*

ワイルドカード (*) 文字は、その前にある文字の 0 個以上のインスタンスと一致します。たとえば、ab*c は、acabcabbbbc などの文字列と一致します。 ac, abc, abbbbc.

( )

かっこは、グループ化の区切り記号として機能します。たとえば、a(bc)* は、aabcabcbcabcbcbc などの文字列と一致します。

\

円記号 (\) は、特殊文字と共に使用されるエスケープ文字です。特殊文字は、パターン文字列で使用される以下の文字です。

  • 円記号 : \
  • 縦線 : |
  • アスタリスク : *
  • 始めかっこ : (
  • 終わりかっこ : )
  • キャレット : ^
  • ドル記号 : $

たとえば、(525) を含む文字と一致させる必要がある場合は、「\(525\)」と入力します。

\\

円記号文字をエスケープ文字ではなく円記号として認識させる場合は、2 つの円記号を使用します。たとえば、\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 という電話番号形式を追加することによって拡張できます。次の正規表現は、3 つの電話番号すべての形式と一致します。

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

前の例は、次のように分析できます。

  • (\\()*   この部分は、最初のかっこを省略可能にします。終わりかっこも正規表現の区切り記号であるため、2 つのバックスラッシュ \\ を使用してエスケープする必要があります。囲んでいる (()) かっこは、\\( の文字列をグループ化することにより、ワイルドカード文字 *\\( の文字列に作用してそれを省略可能にします。
  • \d\d\d   この部分により、次に正確に 3 つの数値の桁数が存在することが必要になります。
  • (\\)|\s|.)   この部分により、3 つの数値の桁数の後に、開きかっこ、スペース、またはピリオドが存在することが必要になります。文字と一致させる各文字列が、グループ化の区切り記号内に含まれ、パイプ文字で区切られています。つまり、グループ化の区切り記号内の指定された文字列のいずれかのみが、一致させる文字列内のこの場所に存在できます。
  • \d\d\d   この部分により、次に正確に 3 つの数値の桁数が存在することが必要になります。
  • (-|.)   この部分により、3 つの数値の桁数の後に、ハイフンまたはピリオドのどちらかが存在することが必要になります。ハイフンとピリオドはグループ化の区切り記号内に存在しているため、この 2 つの文字のどちらかのみが、一致させる文字列内のこの場所に存在できます。
  • \d\d\d\d   この部分により、次に正確に 4 つの数値の桁数が存在することが必要になります。

正規表現を使用したトランスポート ルールの例

次の例は、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

詳細情報

各コマンドの構文およびパラメータの詳細については、以下のトピックを参照してください。

トランスポート ルールの詳細については、以下のトピックを参照してください。

参照している情報が最新であることを確認したり、他の Exchange Server 2007 ドキュメントを見つけたりするには、Exchange Server TechCenter を参照してください。