ActionScript3.0では,文字列のマッチングに便利な「正規表現」の使用ができるようになりました。正規表現を扱うには,「RegExpクラス」を使用します。図1のムービーは,正規表現を使ってマッチングを行い,任意の文字列を置き換えています。正規表現を使用すると,文字列に対する様々な処理の作成が簡単になります。

図1●一括置き換えをするムービー
図1●一括置き換えをするムービー
(クリックすると別ウィンドウでムービーを表示します)

そもそも正規表現とは

 そもそも「正規表現(Regular expression)」とはどんな仕組みなのでしょうか。実は正規表現は,ActionScript3.0固有の仕組みではありません。様々なプログラミング言語やテキスト・エディタ等で,文字列の「マッチング処理」を行うために利用されている「小さなプログラミング言語」と言っても差支えないくらいの仕組みなのです。「コンピュータで,文字列の置き換え処理をやる場合には,こういう書き方ができると便利だよね」というルールを決め,それをいろいろな環境で動くようにしているわけですね。正規表現は,プログラミング言語の垣根を越えた,「プログラマが文字列の操作をしたい時に使う,汎用的な仕組み」なのです。

 正規表現によって実現できる「マッチング処理」とは,決められた「パターン記法」によって,「こういう文字列があるかどうかを問い合わせたい」という条件を作成し,任意の文字列内に,そのパターンが含まれているかどうかを判定する処理のことを指します。さらに,他のクラスと組み合わせると,マッチングした部分の数を数えたり,取り出したり,置き換えたりといった,文字列に対する操作も可能です。

 「文字列操作なら,言語を問わず正規表現さんに任せてしまおう」というような,文字列操作の専門家のような存在なのです。それでは,さっそく正規表現を使ってみましょう。

ActionScriptで正規表現処理をするにはRegExpクラスを使う

 ActionScript3.0で正規表現を使用するには,RegExpクラスを使用します。RegExpクラスのインスタンスを生成するには,コンストラクタ関数の引数として,マッチングを行うパターンを表す文字列を渡します。例えば,次のコードは,「夏休み」という文字列に対してマッチングを行うインスタンスを生成します。

var pattern:RegExp = new RegExp("夏休み");

 「パターン」に関しての説明は後ほどします。今は「問い合わせを表す文字列」くらいに考えておいてください。さて,このRegExpクラスのインスタンスの生成方法には,もうひとつの記述法があります。下記のコードは,上記のコードと同じく,「夏休み」という文字列に対してマッチングを行うインスタンスを生成します。

var pattern:RegExp = /夏休み/;

 RegExpクラスのインスタンスを生成する場合には,「/」(スラッシュ)で始まり,「/」で終わる「正規表現リテラル」の形で,直接マッチングを行うパターンをコード内に記述することができます。これは,配列(Arrayクラスのインスタンス)を,

var myList1:Array = new Array(1,2,3);
var myList2:Array = [1, 2, 3];

のように,new演算子を使った方法と,配列アクセス演算子を使った方法の2種類で生成できるのとよく似ていますね。

 生成したRegExpクラスのインスタンスは,任意の文字列に対してマッチング処理を行えます。

文字クラスを使った正規表現のパターン記法

 正規表現の処理を行うには,どのような文字列を探したいのかを,独特のパターンによる記法で表現します。

 最も基本的な記法は,前述のとおり,2つの「/」(スラッシュ)を使って,検索したい文字列を囲む記法です。

/検索したい文字列/

 次のパターンは,「すいか」という文字列を検索します。

/すいか/

 この基本的な記法に加え,正規表現では,「文字クラス」や「メタ文字」を使って柔軟にパターンを作成することができます。まずは「文字クラス」を見てみましょう。文字クラスは,「[」と「]」を使用した記法です。「この間に記述された文字列のいずれかに該当する」という意味になります(表1)。

表1●文字クラスに使用する記号
記号 意味
[ ](角括弧) [ ]の間に記述されたいずれかの文字と一致します
-(ハイフン) 任意の範囲の文字列と一致します
[^...] [ ]の間に記述されたいずれの文字とも異なる場合に一致します
\(円記号) エスケープしたい特殊な文字列の前に付ける

 例えば,次のようにパターンを記述すると,「すいか」「すずか」「すみか」「すんか」にマッチします。

/す[いずみん]か/

 また,文字クラス内で「-」(ハイフン)を使用すると,文字コードに準じて,任意の範囲の文字列を指定することができます。例えば,次のパターンは,小文字の「a」から「z」までの文字列にマッチします。

/[a-z]/

 文字クラス内の先頭で「^」(キャレット)を使用すると,「否定」の意味になります。例えば,次のパターンは,0~9以外の文字列にマッチします

/[^0-9]/

 文字クラス内で「]」や[-」等の記号自体を検索対象としたい場合には,改行文字やタブ文字等の特殊な文字列を扱う時と同じように,エスケプシーケンス(メタ文字)を使用します。おなじみの「\」を付ける記法ですね。例えば,次のパターンは,「]」と「-」にマッチします

/[\]\-]/

 その他,「\n」「\r」等の改行文字も使用することもできます。