修飾子

一致する文字数がいくつあるかわからないときがあります。これに対応するため、正規表現では修飾子の概念を採用しています。この修飾子を使用して、正規表現の所定の要素を何回一致させるか指定することができます。

各種修飾子とその意味を次の表に示します。

文字 説明
* 直前のサブ式と 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 桁の章番号を扱えるようにすることが必要です。この場合にも修飾子を使用します。次の JScript の正規表現は、任意の番号の章見出し (chapter) と一致します。

/Chapter [1-9][0-9]*/

上の例と同じ意味の VBScript の正規表現は次のとおりです。

"Chapter [1-9][0-9]*"

修飾子は範囲表現のあとに指定します。したがって、0 ~ 9 だけの章も含むすべての範囲表現に適用されます。

2 文字目以降は必ずしも数字である必要はないため、'+' 修飾子は使用しません。'?' も、桁数が 2 桁に固定されてしまうため、使用しません。'Chapter' とスペースに続く数字が少なくとも 1 桁あるものと一致します。

章番号が 99 以下であることが確かである場合は、次の JScript の正規表現を使用して、章番号が 1 桁以上 2 桁以下であるものと一致させることができます。

/Chapter [0-9]{1,2}/

VBScript では、次のようにします。

"Chapter [0-9]{1,2}"

上の正規表現では、99 を超える章番号があったときに、その先頭の 2 桁と一致してしまう点がやや不便です。また、第 0 章 (Chapter 0) があったときにも一致してしまいます。2 桁の章番号だけに一致するよう改善した JScript の正規表現を次に示します。

/Chapter [1-9][0-9]?/

または

/Chapter [1-9][0-9]{0,1}/

VBScript では、次のようにします。

"Chapter [1-9][0-9]?"

または

"Chapter [1-9][0-9]{0,1}"

'*'、'+'、および '?' の各修飾子は、すべて "無制限" と呼ばれ、できるだけ多くの文字列と一致します。場合によっては、予想外な結果になることがあります。最小一致で済ませたい場合もあります。

たとえば、HTML ドキュメントの H1 タグで囲まれている章タイトルを検索する場合を考えます。ドキュメントでは次のように記述されています。

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

次の正規表現は、H1 タグの開始記号 (<) から終了記号 (>) までのすべてと一致します。

/<.*>/

VBScript の正規表現は次のとおりです。

"<.*>"

H1 開始タグだけと一致させるには、次の正規表現を使用します。この場合は <H1> だけと一致します。

/<.*?>/

または

"<.*?>"

'*'、'+'、または '?' の各修飾子のあとに '?' を指定すると、無制限の一致から、制限された一致、つまり最小一致に変わります。