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 以上の整数を指定します。nm 以下です。nm 回一致します。たとえば、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> だけと一致します。

/<.*?>/

*、+、? の各量指定子の後に ? を指定すると、最長一致から最短一致に変わります。

参照

その他の技術情報

正規表現の概説