MAXScript エディタにおける正規表現を使用した検索置換

次のトピックは、http://www.scintilla.org/SciTERegEx.html にあるパブリック ドメイン文書に基づいています。

用途

正規表現 (RegEx) は、文字列ではなくパターンを検索するために使用します。

たとえば、次の POSIX モードの正規表現を使用すると、プロパティ ファイル内の $(name.subname) のような変数を検索することができます。

\$([a-z.]+)

この正規表現は、次のような内容になっています。

正規表現を使用した置換では、タグによる式を使用することによって複雑な変換を行うことができます。

たとえば、カンマで区切られた 1 対の数字は、POSIX モードの正規表現で置き換えることによって順番を変えることができます。

([0-9]+),([0-9]+)

を次のように置換します。

\2,\1

1 つ目の正規表現は、1 つ以上の連続した 0 から 9 までの数字、カンマ、さらに 1 つ以上の連続した 0 から 9 までの数字、にマッチするパターンを表します。

POSIX モード以外では、同じパターンは次のように書きます。

\([0-9]+\),\([0-9]+\)

置換する正規表現 \\2, \\1 は、マッチした 2 つ目の表現をカンマの前に置き、1 つ目の表現をカンマの後に置くことを表します。

1 つ目の POSIX モードの正規表現は、次のように書くこともできます。

(\d+),(\d+))

これは、1 つ以上の連続した任意の数字、カンマ、さらに 1 つ以上の連続した任意の数字、というパターンを表します。

構文スタイル - POSIX スタイルと従来の UNIX スタイル

正規表現の構文は、次のパラメータによって異なります。

find.replace.regexp.posix

このパラメータが 0 (既定値)に設定されている場合は、正規表現の構文には従来の UNIX スタイル(\(\) が取得する文字列範囲を定義し、() は文字通りのカッコを表す) が使用されます。

1 に設定されている場合は、正規表現の構文にはより一般的なスタイル (通常のカッコ () が取得する文字列範囲を定義し、\(\) は文字通りのカッコを表す) が使用されます。

構文規則

[1] 文字

文字はその文字自体にマッチしますが、次の特殊文字(メタキャラクタ)は例外です。\ [ ] * + ^ $ および POSIX モードの場合は ( )

[2] .

任意の文字にマッチします。

[3] \

後続の文字にマッチしますが、以下の例外があります。

バックスラッシュは、すべてのメタキャラクタおよび自身のエスケープ文字として使用されます。

[4] [set]

セット内のいずれかの文字にマッチします。

セット内の最初の文字が ^ である場合は、セット内の文字以外の文字 (セットの補集合) にマッチします。

略式の S-E (開始文字(S)、ダッシュ、終了文字 (E)) は、開始文字から終了文字までの文字のセット (開始文字と終了文字を含む) を指定します。

特殊文字 ] および - は、このセットの最初の文字として使用される場合には特別な意味はありません。この両方を同時に含めたい場合は、[-]A-Z] のように「-」を先に指定するか、[A-Z\]\-] のようにそれぞれの直前にバックスラッシュを追加します。

例: マッチする文字
`[-] ]`
`[]- ]`
[a-z] 任意の小文字のアルファベット
[^-]] - および ] を除く任意の文字
[^A-Z] 大文字のアルファベットを除く任意の文字
[a-zA-Z] 任意のアルファベット

[5] *

[1]から[4]の任意の正規表現形式([3]の[7]、[8]、[9]形式は除きます)とそれに続く終了文字(*)は、その形式の _0 個以上_と一致します。

たとえば、[a-z]* は、「小文字のアルファベットが 0 個以上連続しているパターン」にマッチします。

[6] +

[5]と同じですが、_1 回以上の繰り返し_にマッチします。

[5]および[6]は最長のパターンにマッチします(マッチしない文字が出現するまで、可能な限り多くの文字にマッチします)。

[7]

[1]から[12]までの正規表現を\(フォーム\) (POSIX フラグを使用している場合は (form)) のように囲むと、フォームにマッチするパターンと同じものにマッチします。() (または ()) で囲むことによってタグが形成され、[8] およびパターンの置換に使用できます。タグ付けされたフォームには、1 から始まる番号が振られます。

[8]

¥ に続いて 1 から 9 までの数字を指定すると、直前にタグ付けされた正規表現([7]参照)にマッチしたパターンに一致します。

[9] \< \>

正規表現の先頭に \< または末尾に \> を付けると、それぞれ語頭または語末でマッチするパターンのみを検索します(同時に使用することもできます)。1 つの語とは、A-Z、a-z、0-9、および _ で始まるか終わる (または両方) キャラクタ文字列であると定義されます。エディタはユーザ設定によってこの定義を拡張します。1 つの語の前後には、必ず先ほどの文字範囲外の文字が先行または後続し、語の区切りとなります (先行も後続もする場合もあります)。

[10] \l

バックスラッシュ(または円マーク)の後にdDsSwWのいずれかが続く場合は、文字クラスになります(いずれも [] セットの内部または外部にある場合)。

[11] \xHH

バックスラッシュ_の後に xさらに、_2 つの連続した 16 進数が続くと、ASCII コードがその値にマッチする文字を表します。 2 つの 16 進数が続かない場合は、そのまま文字「x」を表します。

[12]

合成正規表現 xy (x と y はそれぞれ[1]から[10]にマッチ)は、_x の最長マッチ_に _y のマッチ_が後続するものにマッチします。

[13] ^ $

正規表現の先頭に ^ または末尾に $ を付けると、それぞれ行頭または行末でマッチするパターンのみを検索します(同時に使用することもできます)。 パターン内のその他の場所では、^ と $ は通常の文字と同じように扱われます。

謝辞

このドキュメントの大部分は、Ozan S. Yigit によって書かれたものです。加筆部分は Neil Hodgson および Philippe Lhoste によるものです。このドキュメントはすべてパブリック ドメインです。