高度なフィルターの詳細

高度なフィルターのデータベースには、オプションを構成する際に組み合わせて使用できるフィルター ルールが含まれています。これらのフィルターにより、転送時にファイルを含めたり除外したりすることができます。

このデータベースは、monrule.ini というファイルにテキスト形式で保存されています。

[Rule Name] ルールの識別に使用する名前。スペースを含めることはできませんが、そのほかに制限はありません。
[Rule Description] ルールの有意義な説明を含む自由形式のフィールド。この説明は、オプション構成プロセスでルールを選択する際に表示されます。
[Rule] ルールの式を含む自由形式のフィールド。ルールそのものは「正規表現」と呼ばれます。構文はシンプルですが、非常に複雑な正規表現を作成することもできます。この後に構文の簡単な説明がありますが、インターネット上にも数多くのチュートリアルがあります。インターネット検索エンジンで「正規表現のチュートリアル」を検索してみてください。
[OK] データベースに加えた変更を保存するにはこのボタンをクリックします。
[Cancel] データベースに加えた変更を破棄するにはこのボタンをクリックします。

正規表現の構文では、いくつかの文字が特殊なコンストラクトとなり、その他の文字は通常文字となります。通常文字は、その文字のみに一致するシンプルな正規表現です。特殊文字は、「\$」、「^」、「.」、「*」、「+」、「?」、「[」、「]」、「\」です。正規表現に含まれるその他の文字は、前に「\」が付いていない限り、すべて通常文字です。

例えば、「f」は特殊文字ではないため、通常文字です。したがって、文字列「f」のみに一致する正規表現です(文字列「ff」には一致しません)。同様に、「o」は、「o」のみに一致する正規表現です。

2 つの正規表現 A と B を連結することができます。結果の正規表現は、文字列の先頭部分が A に一致し、残りの部分が B に一致する場合に、その文字列に一致します。

例えば、正規表現「f」と「o」を連結した正規表現「fo」は、文字列「fo」のみに一致します。

正規表現内で特殊な意味を持つ文字および文字シーケンスを次に示します。ここに含まれていない文字は特殊文字ではないため、検索および照合の際にその文字そのものとして扱われます。

. 改行を除く任意の文字に一致する特殊文字。連結を使用して、a.b のような正規表現を作ることができます。この正規表現は、a で始まり b で終わる任意の 3 文字の文字列に一致します。
* 単独ではコンストラクトにならないサフィックスで、直前の正規表現の最大限の繰り返しを表します。例えば、fo* という正規表現では、*o に適用されます。したがって、fo* は、f の後に任意の数の o が続く文字列に一致します。

o がゼロ個のケースも許容されるため、fo*f にも一致します。

* は、常に直前の最小限の正規表現に適用されます。したがって、fo* に含まれるのは o の繰り返しであり、fo の繰り返しではありません。

* コンストラクトが処理される際には、最初は最大限の繰り返しに一致します。その後、パターンの残りの部分が処理されます。残りの部分の処理に失敗すると、バックトラッキングが発生して、* コンストラクトの一致の一部が破棄されます (それによってパターンの残りの部分が一致するようになる場合)。例えば、正規表現 c[ad]*ar が文字列 caddaar に対して照合されると、最初は [ad]*addaa に一致しますが、それではパターンの次の a に一致しなくなります。そのため、[ad] の一致の末尾が取り消されて、次の a の照合が再試行されます。今度は次の a に一致します。

+ * に似ていますが、+ では、直前のパターンに少なくとも 1 回は一致する必要があります。したがって、c[ad]+r は、cr には一致しませんが、c[ad]*r に一致する他のすべての文字列に一致します。
? * に似ていますが、直前のパターンの 0 回または 1 回の一致のみが許容されます。したがって、c[ad]?r に一致するのは、crcarcdr のみです。
[ ] で終了する文字セットの開始を表します。最も単純なケースでは、2 つの角かっこ ([ ]) で囲まれた文字によって文字セットが構成されます。例えば、[ad]a または d に一致し、[ad]* は任意の数の a および d からなる文字列 (空の文字列を含む) に一致します。したがって、c[ad]*rcar などの文字列に一致します。

文字セットには、文字の範囲を含めることもできます。その場合は、2 つの文字の間に - (ハイフン) を入力します。例えば、[a-z] は、アルファベットのすべての小文字に一致します。範囲は、個別の文字と自由に組み合わせることができます。例えば、[a-z$%.] は、アルファベットのすべての小文字と、$%、ピリオドに一致します。

文字セット内では、特殊文字が特殊文字として扱われなくなることに注意してください。文字セット内には、また別の特殊文字が存在します。]-、^ の 3 つです。

文字セットに ] を含める場合は、最初の文字にする必要があります。例えば、[ ]a] は、] または a に一致します。文字セットに - を含める場合は、範囲を表すと解釈されないコンテキストで使用する必要があります。したがって、最初の文字として使用するか、範囲の直後で使用します。

[^ 「文字補集合」の開始を表します。文字補集合は、指定した文字以外のすべての文字に一致します。したがって、[^a-z0-9A-Z] は、英数字を除くすべての文字に一致します。
^ 文字セット内では、最初の文字である場合を除いて特殊文字ではありません。^ の直後の文字は、最初の文字であるかのように扱われます (-] についても同様)。

^ は、空の文字列に一致する特殊文字です。ただし、一致するのは、照合するテキストの行頭にある場合のみです。それ以外の場合は何にも一致しません。したがって、^foo は、行頭にある foo に一致します。

$ ^ に似ていますが、行末にある場合にのみ一致します。したがって、xx*$ は、行末にある 1 つ以上の x に一致します。
\ 2 つの機能があります。上記の特殊文字 (\ を含む) を引用する機能と、追加の特殊なコンストラクトを導入する機能です。

\ は特殊文字を引用するため、例えば、\$ という正規表現は $ のみに一致し、\ [ という正規表現は [ のみに一致します。

\ に任意の文字が続く正規表現は、ほとんどの場合、その文字のみに一致します。ただし、いくつかの例外があります。それは、直前に \ がある場合に特殊なコンストラクトになる文字です。そのような文字は、単独で出現する場合は常に通常文字になります。

新しい特殊文字が定義されることはありません。正規表現の構文の拡張はすべて、\ で始まる 2 文字のコンストラクトを新たに定義することによって行われます。

\| 2 つの選択肢を指定します。2 つの正規表現 A および B の間に \| がある正規表現は、A または B に一致するすべての文字列に一致します。

したがって、foo\|bar は、foo または bar のみに一致します。

\| は、前後にある最も大きな正規表現に適用されます。\| によるグループ化が制限されるのは、\( ... \) で囲まれている場合だけです。

複数の \| が使用されている場合は、完全なバックトラッキングが行われます。

\( ... \) グループ化コンストラクトを指定して、一致したサブストリングを後で参照できるようにします。Micro Focus の実装では、使用できるグループ化は 1 つだけです。このグループ化の内容は、転送用に検出されたファイル名として扱われます。

この最後の応用例は、かっこによるグループ化という概念に由来するものではなく、まったく別の機能です。実用上競合しないために、同じ \( ... \) コンストラクトの 2 番目の意味として割り当てられただけです。以降はこの機能の説明です。

\n \( ... \) コンストラクトが終わると、このコンストラクトに一致したテキストの先頭と末尾が記憶されます。正規表現の以降の箇所で、\n (数字) が付いた正規表現を使用すると、「\( ... \) コンストラクトの n 番目の一致と同じテキストに一致する」という意味になります。\( ... \) コンストラクトには、正規表現内で開始された順に番号が付けられます。

正規表現に出現する最初の 9 つの \( ... \) コンストラクトに一致する文字列には、開始された順に 1 ~ 9 の番号が割り当てられます。\1\9 を使用して、対応する \( ... \) コンストラクトに一致したテキストを参照できます。

例えば、\(.*\)\1 は、同じ 2 つの部分からなる任意の文字列に一致します。\(.*\) は前半部分の任意の文字列に一致しますが、それに続く \1 は、それとまったく同じテキストに一致する必要があります。

\b 空の文字列に一致しますが、一致するのは、単語の先頭または末尾にある場合のみです。したがって、\bfoo\b は、単独の語として出現するすべての foo に一致します。\bball\(s\|\)\b は、単独の語として出現する ball または balls に一致します。
\B 空の文字列に一致しますが、一致するのは、単語の先頭または末尾にない場合のみです。
\< 空の文字列に一致しますが、一致するのは、単語の先頭にある場合のみです。
\> 空の文字列に一致しますが、一致するのは、単語の末尾にある場合のみです。
\w 単語を構成する任意の文字に一致します。
\W 単語を構成する文字以外の文字に一致します。

  • ^NULLFILE は、NULLFILE というファイルのみに一致します。
  • ^NUL[0-9][0-9].* は、名前が NUL で始まり、その後に 0 ~ 9 の範囲の 2 つの数字が続き、さらにその後に任意の数の文字が続くファイルに一致します。
  • .*3$ は、名前が数字の 3 で終わる任意のファイルに一致します。
  • ^A.*[0-3][1-2]$ は、文字 A から始まる任意の文字数の名前を持つファイルに一致しますが、最後の 2 文字は数字でなければならず、その範囲は、最後から 2 番目の数字は 0 ~ 3、最後の数字は 1 ~ 2 である必要があります。
  • ^(CON)|^(NUL)|^(COM[0-9])|^(LPT[1-9])|^(AUX)|^(CLOCK\$) は、無効な DOS ファイル名を除外します。
    注: 文字 $ は、直前にバックスラッシュを付けると文字列に含めることができます。
    このようなルールを作成して、同期項目を作成するときに除外フィルターとして含めると、ここに指定されている無効な DOS ファイル名がすべて除外されます。

    CONTROL というファイルも除外の対象になります。それを防ぐには、メタ文字 $ を含めます(^(CON)$ ....)。これにより、フィルターによって認識されるのは CON のみになります。