JScript の量指定子
更新 : 2007 年 11 月
一致する文字数を指定できない場合は、正規表現の量指定子の概念を利用します。これらの量指定子を使用して、正規表現の任意の要素を何回一致させるかを指定できます。
量指定子の意味
文字 |
説明 |
---|---|
* |
直前の文字または部分式と 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> だけと一致します。
/<.*?>/
*、+、? の各量指定子の後に ? を指定すると、最長一致から最短一致に変わります。