高度なフィルターのデータベースには、オプションを構成する際に組み合わせて使用できるフィルター ルールが含まれています。これらのフィルターにより、転送時にファイルを含めたり除外したりすることができます。
このデータベースは、monrule.ini というファイルにテキスト形式で保存されています。
正規表現の構文では、一部の文字が特殊文字となり、その他の文字は「通常」文字となります。通常文字は、その文字のみに一致するシンプルな正規表現です。特殊文字は、「\$」、「^」、「.」、「*」、「+」、「?」、「[」、「]」、「\」です。正規表現に含まれるその他の文字は、前に「\」が付いていない限り、すべて通常文字です。
たとえば、「f」は特殊文字ではないため、通常文字です。したがって、文字列「f」のみに一致する正規表現です(文字列「ff」には一致しません)。同様に、「o」は、「o」のみに一致する正規表現です。
2 つの正規表現 (たとえば A および B) は連結できます。連結した正規表現では、文字列の先頭部分が A に一致し、残りの部分が B に一致する場合に、その文字列に一致します。
たとえば、正規表現「f」と「o」を連結した正規表現「fo」は、文字列「fo」のみに一致します。
正規表現内で特殊な意味を持つ文字および文字シーケンスを次に示します。以下に記載されていない文字は特殊文字ではないため、検索および照合の際にその文字そのものとして扱われます。
o がゼロ個のケースも該当するため、 fo* は f にも一致します。
* は、常に直前の最小限の正規表現に適用されます。したがって、fo* に含まれるのは o の繰り返しであり、fo の繰り返しではありません。
* コンストラクトの処理では、最初に、見つけられる限り多くの繰り返しが照合されます。その後、パターンの残りの部分が処理されます。残りの部分の処理に失敗すると、バックトラッキングが発生して、* コンストラクトの一致の一部が破棄されます (それによってパターンの残りの部分が一致するようになる場合)。たとえば、正規表現 c[ad]*ar が文字列 caddaar に対して照合されると、最初は [ad]* が addaa に一致しますが、それではパターンの次の a に一致しなくなります。そのため、[ad] の一致の末尾が取り消されて、次の a の照合が再試行されます。今度は次の a に一致します。
文字セットには、文字の範囲を含めることもできます。その場合は、2 つの文字の間に - (ハイフン) を入力します。たとえば、[a-z] は、アルファベットのすべての小文字に一致します。範囲は、個別の文字と自由に組み合わせることができます。たとえば、[a-z$%.] は、アルファベットのすべての小文字と、$、%、ピリオドに一致します。
文字セットに ] を含める場合は、最初の文字にする必要があります。たとえば、[ ]a] は、] または a に一致します。文字セットに - を含める場合は、範囲を表すと解釈されないコンテキストで使用する必要があります。したがって、最初の文字として使用するか、範囲の直後で使用します。
^ は、空の文字列に一致する特殊文字です。ただし、一致するのは、照合するテキストの行頭にある場合のみです。それ以外の場合は何にも一致しません。したがって、^foo は、行頭にある foo に一致します。
\ は特殊文字を引用するため、たとえば、\$ という正規表現は $ のみに一致し、\ [ という正規表現は [ のみに一致します。
\ に任意の文字が続く正規表現は、ほとんどの場合、その文字のみに一致します。ただし、いくつかの例外があります。それは、直前に \ がある場合に特殊なコンストラクトになる文字です。そのような文字は、単独で使用する場合は常に通常文字になります。
新しい特殊文字が定義されることはありません。正規表現の構文の拡張はすべて、\ で始まる 2 文字のコンストラクトを新たに定義することによって行われます。
したがって、foo\|bar は、foo または bar のみに一致します。
\| は、前後にある最も大きな正規表現に適用されます。\| によるグループ化が制限されるのは、\( ... \) で囲まれている場合だけです。
複数の \| を使用すると、完全なバックトラッキング機能を利用できます。
この最後の応用例は、かっこによるグループ化という概念に由来するものではなく、まったく別の機能です。実用上競合しないために、同じ \( ... \) コンストラクトの 2 番目の意味として割り当てられただけです。この機能の詳細は以下のとおりです。
正規表現に現れる最初の 9 つの \( ... \) コンストラクトに一致する文字列には、最初から順番に 1 から 9 の番号が割り当てられます。 \1 から \9 は、対応する \( ... \) コンストラクトで一致したテキストを参照するために使用できます。
たとえば、\(.*\)\1 は、同じ 2 つの部分からなる任意の文字列に一致します。\(.*\) は前半部分の任意の文字列に一致しますが、それに続く \1 は、それとまったく同じテキストに一致する必要があります。
CONTROL というファイルも除外の対象になります。それを防ぐには、メタ文字 $ を含めます ^(CON)$ ....これにより、フィルターによって認識されるのは CON のみになります。