|
|
第21回 ActionScript3.0で正規表現を扱うActionScript3.0では,文字列のマッチングに便利な「正規表現」の使用ができるようになりました。正規表現を扱うには,「RegExpクラス」を使用します。図1のムービーは,正規表現を使ってマッチングを行い,任意の文字列を置き換えています。正規表現を使用すると,文字列に対する様々な処理の作成が簡単になります。 そもそも正規表現とはそもそも「正規表現(Regular expression)」とはどんな仕組みなのでしょうか。実は正規表現は,ActionScript3.0固有の仕組みではありません。様々なプログラミング言語やテキスト・エディタ等で,文字列の「マッチング処理」を行うために利用されている「小さなプログラミング言語」と言っても差支えないくらいの仕組みなのです。「コンピュータで,文字列の置き換え処理をやる場合には,こういう書き方ができると便利だよね」というルールを決め,それをいろいろな環境で動くようにしているわけですね。正規表現は,プログラミング言語の垣根を越えた,「プログラマが文字列の操作をしたい時に使う,汎用的な仕組み」なのです。 正規表現によって実現できる「マッチング処理」とは,決められた「パターン記法」によって,「こういう文字列があるかどうかを問い合わせたい」という条件を作成し,任意の文字列内に,そのパターンが含まれているかどうかを判定する処理のことを指します。さらに,他のクラスと組み合わせると,マッチングした部分の数を数えたり,取り出したり,置き換えたりといった,文字列に対する操作も可能です。 「文字列操作なら,言語を問わず正規表現さんに任せてしまおう」というような,文字列操作の専門家のような存在なのです。それでは,さっそく正規表現を使ってみましょう。 ActionScriptで正規表現処理をするにはRegExpクラスを使うActionScript3.0で正規表現を使用するには,RegExpクラスを使用します。RegExpクラスのインスタンスを生成するには,コンストラクタ関数の引数として,マッチングを行うパターンを表す文字列を渡します。例えば,次のコードは,「夏休み」という文字列に対してマッチングを行うインスタンスを生成します。
「パターン」に関しての説明は後ほどします。今は「問い合わせを表す文字列」くらいに考えておいてください。さて,このRegExpクラスのインスタンスの生成方法には,もうひとつの記述法があります。下記のコードは,上記のコードと同じく,「夏休み」という文字列に対してマッチングを行うインスタンスを生成します。
RegExpクラスのインスタンスを生成する場合には,「/」(スラッシュ)で始まり,「/」で終わる「正規表現リテラル」の形で,直接マッチングを行うパターンをコード内に記述することができます。これは,配列(Arrayクラスのインスタンス)を,
のように,new演算子を使った方法と,配列アクセス演算子を使った方法の2種類で生成できるのとよく似ていますね。 生成したRegExpクラスのインスタンスは,任意の文字列に対してマッチング処理を行えます。 文字クラスを使った正規表現のパターン記法正規表現の処理を行うには,どのような文字列を探したいのかを,独特のパターンによる記法で表現します。 最も基本的な記法は,前述のとおり,2つの「/」(スラッシュ)を使って,検索したい文字列を囲む記法です。
次のパターンは,「すいか」という文字列を検索します。
この基本的な記法に加え,正規表現では,「文字クラス」や「メタ文字」を使って柔軟にパターンを作成することができます。まずは「文字クラス」を見てみましょう。文字クラスは,「[」と「]」を使用した記法です。「この間に記述された文字列のいずれかに該当する」という意味になります(表1)。
表1●文字クラスに使用する記号
例えば,次のようにパターンを記述すると,「すいか」「すずか」「すみか」「すんか」にマッチします。
また,文字クラス内で「-」(ハイフン)を使用すると,文字コードに準じて,任意の範囲の文字列を指定することができます。例えば,次のパターンは,小文字の「a」から「z」までの文字列にマッチします。
文字クラス内の先頭で「^」(キャレット)を使用すると,「否定」の意味になります。例えば,次のパターンは,0〜9以外の文字列にマッチします
文字クラス内で「]」や[-」等の記号自体を検索対象としたい場合には,改行文字やタブ文字等の特殊な文字列を扱う時と同じように,エスケプシーケンス(メタ文字)を使用します。おなじみの「\」を付ける記法ですね。例えば,次のパターンは,「]」と「-」にマッチします
その他,「\n」「\r」等の改行文字も使用することもできます。
>> メタ文字を使って柔軟な表現をする
連載新着連載目次へ >>
|