フラグとプロパティ

次の表に、正規表現に対して設定できる 5 種類のフラグを示します。各フラグには正規表現オブジェクトのプロパティとしてアクセスできます。

フラグ

プロパティ

説明

g

global

複数箇所に一致します。

i

ignoreCase

一致の判定において大文字と小文字を区別しません。AZ および az の文字に適用されますが、Éé などの拡張文字には適用されません。

m

multiline

このフラグを設定した場合、$ および ^ はそれぞれ行末と行頭にも一致します。

s

dotall

このフラグを設定した場合、.(ドット) は改行文字 (\n) にも一致します。

x

extended

正規表現の拡張機能を有効にします。パターンの一部と見なされない空白を正規表現の中に挿入できるようになります。これにより、正規表現コードの読みやすさを向上できます。

これらのプロパティは読み取り専用です。次のように、正規表現変数を設定する際にはフラグ (gimsx) を設定できます。

var re:RegExp = /abc/gimsx;

しかし、名前付きプロパティの値を直接設定することはできません。たとえば、次のコードではエラーが発生します。

var re:RegExp = /abc/;
re.global = true; // エラーが発生する

デフォルトでは、正規表現の宣言内で指定しない限りフラグは設定されず、対応する各プロパティの値は false となります。

正規表現には上記の他にも、次の 2 つのプロパティがあります。

サブトピック

g (global) フラグ
i (ignoreCase) フラグ
m (multiline) フラグ
s (dotall) フラグ
x (extended) フラグ
lastIndex プロパティ
source プロパティ

g (global) フラグ

g (global) フラグを設定しない場合、正規表現が複数の場所に一致することはありません。たとえば、次の正規表現には g フラグを設定していないので、String.match() メソッドは一致したサブストリングを 1 つしか返しません。

var str:String = "she sells seashells by the seashore.";
var pattern:RegExp = /sh\w*/;
trace(str.match(pattern)) // 出力: she

次のように g フラグを設定すると、Sting.match() メソッドは複数の一致箇所を返します。

var str:String = "she sells seashells by the seashore.";
var pattern:RegExp = /sh\w*/g;
// 同じパターンだが、今度は g フラグを設定する
trace(str.match(pattern)); // 出力: she,shells,shore

i (ignoreCase) フラグ

正規表現の一致を判定する際、デフォルトでは大文字と小文字が区別されますが、i (ignoreCase) フラグを設定した場合は大文字と小文字が区別されません。たとえば、次の正規表現に含まれている小文字の s は、ストリングの先頭にある大文字の S には一致しません。

var str:String = "She sells seashells by the seashore.";
trace(str.search(/sh/)); // 出力: 13 -- Not the first character

この正規表現に i フラグを設定すると、大文字の S にも一致するようになります。

var str:String = "She sells seashells by the seashore.";
trace(str.search(/sh/i)); // 出力 : 0

i フラグによって大文字と小文字が無視されるのは、A-Z および a-z 文字についてのみであり、Éé では無視されません。

m (multiline) フラグ

m (multiline) フラグを設定しない場合、^ はストリングの先頭に、$ はストリングの末尾に一致します。m フラグを設定した場合、これらの文字はそれぞれ行頭と行末にも一致します。次の例では、ストリング内に改行文字が含まれています。

var str:String = "Test\n";
str += "Multiline";
trace(str.match(/^\w*/g)); // ストリングの先頭にある単語に一致する

正規表現に g (global) フラグを設定していても、^ に一致する場所は 1 つ (ストリングの先頭) しか存在しないので、match()-- メソッドが返すサブストリングは 1 つだけです。したがって、結果の出力は次のようになります。

Test

次の例も同じコードですが、今度は m フラグを設定しています。

var str:String = "Test\n";
str += "Multiline";
trace(str.match(/^\w*/gm)); // 行頭にある単語に一致する 

この場合、出力にはそれぞれの行頭にある単語が含まれます。

Test,Multiline

行末を示す文字は、\n だけです。次の文字は行末と見なされません。

s (dotall) フラグ

s (dotall、つまり "ドットを全文字対象にする") フラグを設定しない場合、正規表現パターン内のドット (.) は改行文字 (\n) には一致しません。したがって、次の例では一致する場所がありません。

var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*?<\/p>/;
trace(str.match(re)); 

ただし、s フラグを設定すると、ドットが改行文字にも一致するようになります。

var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*?<\/p>/s;
trace(str.match(re)); 

この場合は、<p> タグに囲まれたサブストリング全体 (改行文字を含む) に一致します。

<p>Test
Multiline</p>

x (extended) フラグ

正規表現は解読が困難になる場合があります。特に、メタ文字やメタシーケンスを多用した正規表現は難解になる場合があります。たとえば、次のようになります。

/<p(>|(\s*[^>]*>)).*?<\/p>/gi

正規表現に x (extended) フラグを設定した場合、パターン内に入力した空白文字がすべて無視されます。たとえば、次の正規表現は前の例と同等です。

/     <p    (>  | (\s* [^>]* >))    .*?    <\/p>  /gix

x フラグを設定している場合に空白文字の一致を調べるには、その空白文字の直前に円記号を付けます。たとえば、次の 2 つの正規表現は同等です。

/foo bar/
/foo \ bar/x

lastIndex プロパティ

lastIndex プロパティは、ストリング内で次回の検索を開始するインデックス位置を示します。このプロパティは、exec() および test() メソッドの呼び出しに対して g フラグを true に設定した場合に有効です。たとえば、次のようなコードがあるとします。

var pattern:RegExp = /p\w*/gi;
var str:String = "Pedro Piper picked a peck of pickled peppers.";
trace(pattern.lastIndex);
var result:Object = pattern.exec(str);
while (result != null)
{
    trace(pattern.lastIndex);
    result = pattern.exec(str);
}

lastIndex プロパティは、デフォルトでは 0 (ストリングの先頭から検索を開始) に設定されていますが、検索を実行するたびに、一致した場所に続くインデックス位置に設定されます。したがって、前の例で示したコードの出力は次のようになります。

0
5
11
18
25
36
44

global フラグを false に設定している場合、exec() および test() メソッドでは lastIndex プロパティを使用しません。

String クラスの match()replace()search() 各メソッドでは、検索処理を常にストリングの先頭から実行します。呼び出しに使用する正規表現の lastIndex プロパティにどのような値を設定しても影響はありません (ただし、match() メソッドを呼び出すと lastIndex には 0 が設定されます)。

lastIndex プロパティに値を設定すれば、ストリング内で正規表現による検索を開始する位置を変更できます。

source プロパティ

source プロパティは、正規表現の中でパターンを定義する部分のストリングを示します。次に実際の使用例を示します。

var pattern:RegExp = /foo/gi;
trace(pattern.source); // foo

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000119.html