繰り返し制御文字は、パターンの中で文字またはシーケンスの繰り返しを指定するために使用します。次に例を示します。
繰り返し制御のメタ文字
|
説明
|
*
(アスタリスク)
|
直前のアイテムについて 0 回以上の繰り返しに一致します。
|
+
(プラス)
|
直前のアイテムについて 1 回以上の繰り返しに一致します。
|
?
(疑問符)
|
直前のアイテムについて 0 回または 1 回だけ一致します。
|
{
n
}
{
n
,}
および
{
n
,
n
}
|
直前のアイテムについて、繰り返し回数または回数の範囲を指定します。
/A¥{27¥}/
は、文字 A の 27 回の繰り返しに一致します。
/A{3,}/
は、文字 A の 3 回以上の繰り返しに一致します。
/A{3,5}/
は、文字 A の 3 回以上 5 回以下の繰り返しに一致します。
|
次のように、繰り返し制御文字は単一の文字に適用することも、グループに適用することもできます。
-
/a+/
は、文字
a
の 1 回以上の繰り返しに一致します。
-
/¥d+/
は、1 桁以上の数字に一致します。
-
/[abc]+/
は、文字
a
、
b
、
c
の任意の組み合わせで構成される 1 文字以上の繰り返しに一致します。
-
/(very, )*/
は、
very
という単語の後にカンマと空白が続くストリングの 0 回以上の繰り返しに一致します。
繰り返し制御文字をグループ化括弧内で使用すると、グループに繰り返し制御を適用できます。 例えば、次の繰り返し制御文字は、
word
というストリングにも、
word-word-word
というストリングにも一致します。
/\w+(-\w+)*/
デフォルトでは、正規表現は「最長一致」の検索ロジックを使用します。すなわち、正規表現に含まれる各サブパターン(
.*
など)について、ストリング内で可能な限り多くの文字に一致する方法を探し、それから正規表現内の次の部分に処理を移します。例えば、次のような正規表現とストリングがあるとします。
var pattern:RegExp = /<p>.*<\/p>/;
str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";
この正規表現はストリング全体に一致します。
<p>Paragraph 1</p> <p>Paragraph 2</p>
しかし、場合によっては、1 組の
<p>... </p>
グループのみに一致させることが本来の目的であることもあります。その場合は次のようにします。
<p>Paragraph 1</p>
任意の繰り返し制御文字の直後に疑問符(
?
)を付けると、その繰り返し制御文字は、「最短一致」の検索ロジックを使用するように動作が変更されます。例えば、次の正規表現では、
*?
という最短一致の繰り返し制御を使用しています。これは、
<p>
と最小限の文字の後に
</p>
が続くストリングに一致します。
/<p>.*?<\/p>/
繰り返し制御文字については、次の点に注意してください。
-
¥{0¥}
または
{0,0}
と指定しても、対象のアイテムが一致から除外されるわけではありません。
-
/abc+*/
のように複数の繰り返し制御文字を重複して指定することはできません。
-
ドット(.) に
*
などの繰り返し制御を付けても、
s
(
dotall
)フラグを設定しない限り複数行にわたって一致することはありません。 例えば、次のようなコードがあるとします。
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*<\/p>/;
trace(str.match(re)); // null;
re = /<p>.*<\/p>/s;
trace(str.match(re));
// output: <p>Test
// Multiline</p>
詳しくは、
フラグとプロパティ
を参照してください。