正規表現の編集

このウィンドウのコントロールを使用して、正規表現の定義と説明を編集します。正規表現の目的の詳細については、正規表現を参照してください。

説明

このフィールドには下のフィールドの正規表現の動作に関する説明を入力してください。

正規表現

このフィールドには正規表現の定義を入力します。この入力フィールドの下にあるステータス フィールドには、入力した正規表現の構文が正しいかどうかが表示されます。

行に正規表現と一致する部分がある場合、行は変更されていないとする

このオプションを選択すると、正規表現と一致する部分を含む行を未変更状態にすることができます。こうすると、Merge は指定した正規表現との一致を含む行の比較目的を完全に無視します。(正規表現で指定していない限り)行全体がその正規表現と一致する必要はありません。

正規表現と一致する一連の文字は無視する

このオプションを選択すると、正規表現と一致する一連の文字を無視します。このオプションは、正規表現と一致する部分以外に有用な内容が含まれている可能性がある場合に使用することができます。たとえば、HTML マークアップ要素を無視する正規表現(<[^<]*>)を使用し、それらのタグを除いた残りの行の内容を比較することができます。

行が正規表現のリストと一致したためにその行の内容全体が無視される場合、その行は空行であるかのように扱われます。未変更状態にはされません

正規表現の照合アルゴリズムは最長一致であることも注意してください。たとえば、<.*> という正規表現を使用すると、<b>Hello, world!</b> の場合 <b></b> の文字の並びのみを個別に無視するのではなくすべてを無視します。

ここにサンプル行を入力してください

このフィールドにサンプル行のテキストを入力すると、正規表現によって一連の文字がどのように無視されるかを確認することができます。

以下で選択されている副正規表現と一致する一連の文字を取り除きます

デフォルトでは、Merge では正規表現に一致した一連の文字全体を無視します。一致する文字の一部分のみを無視するよう定義することもできます。たとえば、C++ のクラス名の変更は無視するが、クラス(class)が構造体(struct)に変わった(または構造体がクラスに変わった)場所は確認したい場合、次のような正規表現を使用します。

(class|struct)[ \t]+([a-zA-Z0-9_]+)

この正規表現にはかっこで囲まれた 2 つの副正規表現が含まれています。次のサンプル行に適用してみましょう。

class SomeClass : public BaseClass {

副正規表現のリストには 3 つのエントリが表示されます。1 番目(All)は正規表現全体と一致する一連の文字(class SomeClass)です。2 番目(1)は 1 番目の副正規表現と一致する一連の文字(class)です。3 番目(2)は 2 番目の副正規表現と一致する一連の文字(SomeClass)です。クラス名の変更は無視するが class/struct の変更状態を確認したい場合は、リストの 3 番目の項目(2)のチェックをオンにし、2 番目の項目のチェックはオフにします。

サンプル行から一致するシーケンスが取り除かれた状態

このフィールドには、上の編集フィールドに入力したサンプル行に正規表現を適用した結果が表示されます。一致する一連の文字は、サンプル行から取り除かれます。残る行は、比較エンジンがほかの行に対して比較を行うときに使用します。行内の空白を無視するように Merge を設定している場合、このフィールドはそれと同じ効果を示します。

正規表現の構文

Araxis Merge で使用する正規表現の構文は、UNIX オペレーティング システムの多くのアプリケーションで使用されるものと同じです。正規表現は一連の単純な特殊文字で、テキスト内で文字のシーケンスを検索するのに使用します。

以下に正規表現の例を挙げます。詳細については、正規表現のリファレンスを参照してください。

単純一致

apple という語を含む行に一致させる場合

apple

apple という語のみを含む行に一致させる場合

^apple$

空白に一致

完全に空、または空白とタブ文字のみを含む行に一致させる場合

^[ \t]*$

説明:

  • ^ は行の先頭に一致します。
  • [ \t]* はゼロまたは 1 個以上の空白またはタブ(\t)文字に一致します。
  • $ は行の終わりに一致します。

C++ コメントに一致

C++ スタイルのコメント(// に続けて行の終わりまで任意の文字が並ぶ)のみを含む行に一致させる場合は、次の式が使用できます。

^[ \t]*//.*$

説明:

  • ^ は行の先頭に一致します。
  • [ \t]* はゼロまたは 1 個以上の空白またはタブ(\t)文字に一致します。
  • // は連続する 2 つの / 文字に一致します。
  • .* はゼロまたは 1 個以上の任意の文字に一致します。
  • $ は行の終わりに一致します。

ソース コードの制御キーワードに一致

いくつかのバージョン管理製品では、テキスト ファイルに特殊なキーワードを挿入することができます。たとえば、Subversion では、$Date$ というテキストを展開して最終チェックインの日付と時刻を含めるようにします。異なるリビジョンのファイルを比較する場合、このようなキーワードを含む行はほとんどの場合一致しないので、無視することができます。C++ コメント行に出現する Date キーワードを無視する式は次のようになります。

^[ \t]*//.*\$Date:.*\$.*$

説明:

  • ^ は行の先頭に一致します。
  • [ \t]* はゼロまたは 1 個以上の空白またはタブ(\t)文字に一致します。
  • // は連続する 2 つの / 文字に一致します。
  • .* はゼロまたは 1 個以上の任意の文字に一致します。
  • \$ はファイルの終わりではなく、文字 $ に一致します。\ を文字の前に置くと、その文字はリテラルとして扱われます。正規表現として持っていた特別な意味はなくなります。
  • Date:Date: と一致します。
  • .* はゼロまたは 1 個以上の任意の文字に一致します。
  • \$ はリテラル文字 $ に一致します。
  • .* はゼロまたは 1 個以上の任意の文字に一致します。
  • $ は行の終わりに一致します。

関連する式:

  • ^[ \t]*//.*\$Archive:.*\$.*$
  • ^[ \t]*//.*\$Author:.*\$.*$
  • ^[ \t]*//.*\$Header:.*\$.*$
  • ^[ \t]*//.*\$JustDate:.*\$.*$
  • ^[ \t]*//.*\$Modtime:.*\$.*$
  • ^[ \t]*//.*\$Revision:.*\$.*$
  • ^[ \t]*//.*\$Workfile:.*\$.*$

式の結合

式によっては、丸かっこ ()| 文字を使用して 1 つに結合できるものがあります。

(apple|^pear$)

説明:

  • ( は式のグループを開始します。
  • appleapple という語を含む行に一致します。
  • | は、前の式(apple)または次の式(^pear$)との一致を含む行に一致します。
  • ^pear$pear という語のみから成る行に一致します。
  • ) はグループを終了します。

この構文を使用すると以下のような大きな式を構成することができます。

^[ \t]*//.*\$(Date|Archive|Author|Header|JustDate|Modtime|Revision|Workfile):.*\$.*$

ほとんどの場合、式をできる限り短くした方が比較のパフォーマンスは良くなります。上の例は、次の例より著しくパフォーマンスが良くなります。

(^[ \t]*//.*\$Date:.*\$.*$)|
(^[ \t]*//.*\$Archive:.*\$.*$)|
(^[ \t]*//.*\$Author:.*\$.*$)|
(^[ \t]*//.*\$Header:.*\$.*$)|
(^[ \t]*//.*\$JustDate:.*\$.*$)|
(^[ \t]*//.*\$Modtime:.*\$.*$)|
(^[ \t]*//.*\$Revision:.*\$.*$)|
(^[ \t]*//.*\$Workfile:.*\$.*$)