コンテンツフィルタリングシステムは、特定の値はもちろんテキストパターンも検索できる、[正規表現]検索に対応しています。 正規表現は、一致する条件を表す文字列と記号の事で、これによりコンテンツフィルタルールをより強力に、柔軟に作成する事ができるようになっています。
正規表現(regexp)とは、メタキャラクタとして知られている特殊文字、アルファベット、数字との組み合わせ、"abc ,"123"などのリテラル文字列から構成されるテキストパターンです。文字列はこれらのパターンと一致しているかどうかを比較され、主にテキストへのマッチング、検索、置換などに使用されます。
メタキャラクタは特定の機能を持つ特殊な文字で、正規表現の中で使用されます。MDaemonのコンテンツフィルタで使用できるメタキャラクタは以下のとおりです。
\ | () [] ^ $ * + ? . <>
メタキャラクタ |
解説 |
\ |
メタキャラクタを文字列として処理するよう、メタキャラクタの前に追加します。メタキャラクタとして使用される記号が含まれている文字列検索に正規表現を使用する場合は必須となります。例えば、"+"を検索ための正規表現では、"\+"を使う必要があります。 |
| |
オルタネーション文字("or"または"bar")は、対象文字列に文字側の表現式のどちらかにマッチする必要がるときに使用します。正規表現"abc|xyz"は、テキスト文字列を検索している"abc"あるいは"xyz" のどちらかにマッチします。 |
[...] |
かぎカッコ[ ]に挟まれた文字のセットは、そのセットの任意の文字にマッチします。また半角ダッシュ'-'を始めの文字と終わりの文字で挟むことで範囲を指定することができます。例えば、 [a-z]という正規表現で[abc]という文字列の検索は"a,"b","c"にマッチします。[az]という正規表現では"a"のみにマッチします。 |
^ |
文字列の先頭を表します。"abc ab a"というターゲット文字列に対して"^a"は最初の1文字だけマッチします。"^ab"は最初から2文字にマッチします。 |
[^...] |
左かぎカッコ[のすぐ後のキャレット("^")には別の意味があります。これはカッコ内の残りの文字の否定を表します。例えば"[^0-9]"という表現は、ターゲット文字が数字ではないことを表します。 |
(...) |
カッコはパターンの順序に影響し、検索と置換の表現に使用するためのグループ化の役割を果たします。 正規表現による検索結果は一時的に保存され、新しい表現のための置換表現に使用することができます。置換表現では、"$0"を含むことができ、正規表現の検索でマッチしたサブストリングに置き換えられます。例えば、"a(bcd)e"という検索表現がサブストリングにマッチした場合、"123-$0-123"という置換表現は"123-abcde-123"にマッチします。 同様に、"$1","$2","$3"などの特殊文字を置換表現で使用することができます。これらも文字はサブストリング全体のマッチの代わりにグループ化の結果により置換されます。後の数字はどのグループ表現を参照するかを示します。例えば、検索表現が"(123)(456)"であり、置換表現が"a-$2-b-$1"である場合、マッチするサブストリングは"a-456-b-123"に置き換えられ、置換表現が"a-$0-b"である場合、は"a-123456-b”に置き換えられます。 |
$ |
文字列の最後の文字を表します。"13 321 123"という文字列に対して、"3$"という表現は文字列の最後の文字にマッチします。"123$"という表現は最後から3文字にマッチします。 |
* |
("*")は直前の文字の0回以上の繰り返しを表します。例えば、"1*abc"は"111abc"および"abc"にマッチします。 |
+ |
上記のアスタリスクに似ていますが、"+"は直前の文字の1回以上の繰り返しを表します。例えば、"1+abc"は"111abc"にマッチしますが"abc"にはマッチしません。 |
? |
?は、記号の左側の文字と0又は1回マッチするする事を表します。つまり、 "1?abc" は"abc"にマッチし、"111abc"の中の”1abcの部分にマッチします。 |
. |
任意の1文字にマッチします。例えば、".+abc"は"123456abc"にマッチし、"a.c"は"aac","abc","acc"などにマッチします。 |
適格な条件とアクション
正規表現はフィルタルールの条件の任意のヘッダに使用することができます。例えば、[if the FROM HEADER contains]というルールの条件に使用できます。また、[if the MESSAGE BODY contains]という条件にも使用することができます。
正規表現は、2つのコンテンツフィルタルール処置を使用されることができます:"Search and Replace Words in a Header"および"Search and Replace Words in the Message Body"。
コンテンツフィルタルール条件で使用される正規表現は、大文字と小文字の区別をしません。コンテンツフィルタルール処置で使用される正規表現の大文字/小文字の区別は任意です。 ルールの処置の中で正規表現を作成する場合、大文字/小文字の区別をするオプションがあります。 |
ルールの条件に正規表現を設定する
ヘッダまたはメッセージ本文の条件に正規表現を使用するように設定するには、
1.ルールの作成ダイアログで、ルールに適用するヘッダまたはメッセージ本文の条件に対応するチェックボックスをクリックします。
2.ルールの作成ダイアログの一番下にあるルールの説明で、上記のステップ1で選択した条件に対応する"contains specific strings"リンクをクリックしてください。これにより検索テキストの指定ダイアログが開かれます。
3. "Currently specified strings..."で"contains"リンクをクリックします。
4.ドロップダウンリストから"Matches Regular Expression"を選択して[OK]をクリックします。
5.正規表現の作成にヘルプが必要な場合、またはそれをテストする場合は、ボタンをクリックします。 "Test regular expression.ダイアログが必要ない場合は、用意されているテキストボックスに正規表現を入力し、[追加]をクリックしてステップ8へ進んでください。
6.[Search expression]テキストボックスに正規表現を入力します。作業をシンプルにするために、正規表現に目的のメタキャラクタを簡単に挿入するためのショートカットメニューが用意されています。このメニューには[>]ボタンをクリックしてアクセスしてください。このメニューからオプションを選択した場合、それに対応するメタキャラクタが表現に挿入され、テキストの挿入ポイントがキャラクタによって要求される適宜の場所に移動されます。
7.用意されたテキストエリアに表現をテストするために使用するテキストを入力し[テスト]ボタンをクリックします。表現のテストが終了したら[OK]をクリックします。
8.[OK]をクリックします。
9.その後、通常の方法でルールの作成を続けてください。
ルールのアクションに正規表現を設定する
[Search and Replace Words in…]アクションに正規表現を使用するように設定するには、
1.ルールの作成ダイアログで、ルールに挿入する[Search and Replace Words in…]アクションに対応するチェックボックスを有効にします。
2.ルールの作成ダイアログの一番下にあるサマリで、上記のステップ1で選択したアクションに対応する[specify information]をクリックしてください。これによりSpecify Search and Rplaceダイアログが開かれます。
3.ステップ1で[Search…header]アクションを選択した場合、ドロップダウンリストから検索するヘッダを選択するか、あるいはもしリストに目的のヘッダがない場合はボックスにヘッダを入力してください。ステップ1で[Search…header]アクションを選択していない場合はこの手順を省略してください。
4.このアクションで使用する検索表現を入力してください。作業をシンプルにするために、正規表現に目的のメタキャラクタを簡単に挿入するためのショートカットメニューが用意されています。このメニューには[>]ボタンをクリックしてアクセスしてください。このメニューからオプションを選択した場合、それに対応するメタキャラクタが表現に挿入され、テキストの挿入ポイントがキャラクタによって要求される適宜の場所に移動されます。
5.このアクションで使用する置換表現を入力してください。検索表現と同様にこのオプションにもショートカットメニューが用意されています。マッチしたサブストリングをテキストで置換するのではなく削除する場合は、このテキストボックスを空白として残してください。
6.表現で大文字と小文字の区別をする場合は[Match case]をクリックしてください。
7.検索および置換のストリングを正規表現とする場合は[Regular expression]をクリックします。さもないとそれぞれのストリングは、サブストリングの検索と置換として扱われ、正規表現の処理を行う代わりにテキストの完全なリテラルのマッチングを検索することになります。
8.表現をテストする必要がない場合は、このステップを省略してください。テストが必要な場合は[Run Test]をクリックします。Search and Replace Testerダイアログで、テストする検索と置換表現を入力し[Test]をクリックします。テストが終了したら[OK]をクリックしてください。
9.[OK]をクリックします。
10.その後、通常の方法でルールの作成を続けてください。