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 以上の整数を指定します。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> だけと一致します。

/<.*?>/

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

参照

その他の技術情報

正規表現の概説