JScript の量指定子
一致する文字数を指定できない場合は、正規表現の量指定子の概念を利用します。 これらの量指定子を使用して、正規表現の任意の要素を何回一致させるかを指定できます。
量指定子の意味
文字 |
説明 |
---|---|
* |
直前の文字または部分式と 0 回以上一致します。 たとえば、zo* は z とも zoo とも一致します。 * は {0,} と同じ意味です。 |
+ |
直前の文字または部分式と 1 回以上一致します。 たとえば、'zo+' は "zo" や "zoo" とは一致しますが、"z" とは一致しません。 + は {1,} と同じ意味です。 |
? |
直前の文字または部分式と 0 回または 1 回一致します。 たとえば、do(es)? は do または does の do と一致します。 ? は {0,1} と同じ意味です。 |
{n} |
n には、0 以上の整数を指定します。 直前の文字と正確に n 回一致します。 たとえば、o{2} は、Bob の o とは一致しませんが、food の 2 つの o とは一致します。 |
{n,} |
n には、0 以上の整数を指定します。 少なくとも n 回一致します。 たとえば、o{2,} は Bob の o とは一致しませんが、foooood のすべての o とは一致します。 o{1,} は o+ と同じ意味になり、 o{0,} は o* と同じ意味です。 |
{n,m} |
m および n には 0 以上の整数を指定します。n は m 以下です。 n ~ m 回一致します。 たとえば、o{1,3} は fooooood の最初の 3 つの o と一致します。 o{0,1} は o? と同じ意味です。 コンマと数の間には空白を入れません。 |
大きなドキュメントでは章番号が 9 を超える場合があるため、2 桁または 3 桁の章番号を扱えるようにする必要があります。 この場合にも量指定子を使用します。 次の正規表現は、任意の桁の章見出し (Chapter) と一致します。
/Chapter [1-9][0-9]*/
量指定子は範囲表現の後に指定します。 したがって、0 ~ 9 だけの章を含むすべての範囲表現に適用されます。
2 文字目以降は必ずしも数字である必要はないため、+ 量指定子は使用しません。 ? も、桁数が 2 桁に固定されてしまうため使用しません。 Chapter と空白文字に続く数字が少なくとも 1 桁あるものと一致します。
章番号が 99 以下であることが確実である場合は、次の正規表現を使用して、章番号が 1 桁以上 2 桁以下であるものと一致させることができます。
/Chapter [0-9]{1,2}/
上の正規表現の欠点は、章番号が 99 を超える場合も、その先頭の 2 桁と一致してしまう点です。 また、Chapter 0 にも一致します。 2 桁の章番号だけに一致するよう改善した正規表現を次に示します。
/Chapter [1-9][0-9]?/
または
/Chapter [1-9][0-9]{0,1}/
*、+、? の 各量指定子は、できるだけ多くの文字列と一致するため、"最長一致" と言われます。 ただし、最短一致が望ましい場合もあります。
たとえば、HTML ドキュメントの H1 タグで囲まれている章タイトルを検索する場合を考えます。 ドキュメントでは次のように記述されています。
<H1>Chapter 1: Introduction to Regular Expressions</H1>
次の正規表現は、H1 タグの開始記号 (<) から終了記号 (>) までのすべてと一致します。
/<.*>/
H1 開始タグだけと一致させるには、次の正規表現を使用します。この場合は <H1> だけと一致します。
/<.*?>/
*、+、? の各量指定子の後に ? を指定すると、 最長一致から最短一致に変わります。