Flash CS3 ドキュメンテーション |
|||
| ActionScript 3.0 のプログラミング > 正規表現の使用 > 正規表現のシンタックス > フラグとプロパティ | |||
次の表に、正規表現に対して設定できる 5 種類のフラグを示します。各フラグには正規表現オブジェクトのプロパティとしてアクセスできます。
|
フラグ |
プロパティ |
説明 |
|---|---|---|
|
|
|
複数箇所に一致します。 |
|
|
|
一致の判定において大文字と小文字を区別しません。 |
|
|
|
このフラグを設定した場合、 |
|
|
|
このフラグを設定した場合、 |
|
|
|
正規表現の拡張機能を有効にします。パターンの一部と見なされない空白を正規表現の中に挿入できるようになります。これにより、正規表現コードの読みやすさを向上できます。 |
これらのプロパティは読み取り専用です。次のように、正規表現変数を設定する際にはフラグ (g、i、m、s、x) を設定できます。
var re:RegExp = /abc/gimsx;
しかし、名前付きプロパティの値を直接設定することはできません。たとえば、次のコードではエラーが発生します。
var re:RegExp = /abc/; re.global = true; // エラーが発生する
デフォルトでは、正規表現の宣言内で指定しない限りフラグは設定されず、対応する各プロパティの値は false となります。
正規表現には上記の他にも、次の 2 つのプロパティがあります。
lastIndex プロパティは、正規表現に対する次回の exec() または test() メソッド呼び出しにおいて使用する、ストリング内のインデックス位置を示します。 source プロパティは、正規表現の中でパターンを定義する部分のストリングを示します。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) フラグを設定した場合は大文字と小文字が区別されません。たとえば、次の正規表現に含まれている小文字の 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 フラグを設定した場合、これらの文字はそれぞれ行頭と行末にも一致します。次の例では、ストリング内に改行文字が含まれています。
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 だけです。次の文字は行末と見なされません。
\r)\u2028)\u2029)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>
正規表現は解読が困難になる場合があります。特に、メタ文字やメタシーケンスを多用した正規表現は難解になる場合があります。たとえば、次のようになります。
/<p(>|(\s*[^>]*>)).*?<\/p>/gi
正規表現に x (extended) フラグを設定した場合、パターン内に入力した空白文字がすべて無視されます。たとえば、次の正規表現は前の例と同等です。
/ <p (> | (\s* [^>]* >)) .*? <\/p> /gix
x フラグを設定している場合に空白文字の一致を調べるには、その空白文字の直前に円記号を付けます。たとえば、次の 2 つの正規表現は同等です。
/foo bar/ /foo \ bar/x
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 プロパティは、正規表現の中でパターンを定義する部分のストリングを示します。次に実際の使用例を示します。
var pattern:RegExp = /foo/gi; trace(pattern.source); // foo
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000119.html