高度なフィルターの詳細

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

このデータベースは、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 つの正規表現 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 のみになります。