アンカー
これまで見てきた例は、章見出しを、その位置に関係なく検索するものでした。文字列 'Chapter'、スペース、章番号の組み合わせは、実際の章見出しである場合もあれば、別の章への参照を示している場合もあります。実際の章見出しは必ず行頭から始まるため、これを利用して、参照を表す章見出しを除外した実際の章見出しだけを検索します。
この場合には、アンカーを使用します。アンカーを使用すると、正規表現の一致箇所を行の先頭または最後に固定することができます。また、単語内または単語の先頭または最後と一致する正規表現を作成することもできます。正規表現のアンカーとその意味を次の表に示します。
文字 | 説明 |
---|---|
^ | 入力文字列の先頭と一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合、^ は '\n' または '\r' の直後にも一致します。 |
$ | 入力文字列の末尾と一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は '\n' または '\r' の直前にも一致します。 |
\b | 単語の境界と一致します。単語の境界とは、単語とスペースとの間の位置のことです。 |
\B | 単語の境界ではない部分と一致します。 |
修飾子とアンカーは一緒に使用できません。改行コードまたは単語の境界の前後を同時に指定することはできないため、'^*' などの正規表現は使用できません。
行頭の文字列と一致させるには、正規表現の先頭で '^' を指定します。角かっこ内で使用する '^' とは異なりますので、間違えないようにしてください。まったく別のものです。
行の最後の文字列と一致させるには、正規表現の最後で '$' を指定します。
アンカーを使用した次の JScript の正規表現で章見出しを検索すると、行頭から始まる章見出しのうち、章番号が最大 2 桁までのものと一致します。
/^Chapter [1-9][0-9]{0,1}/
上の例と同じ意味の VBScript の正規表現は次のとおりです。
"^Chapter [1-9][0-9]{0,1}"
実際の章見出しは行頭から始まるだけでなく、その行には章見出ししかないため、章見出しは行の最後でもあります。次の正規表現では、参照を除外した、実際の章見出しだけに一致します。行の先頭と最後だけに一致するように正規表現で指定しています。
/^Chapter [1-9][0-9]{0,1}$/
VBScript では、次のようにします。
"^Chapter [1-9][0-9]{0,1}$"
単語の境界と一致させる場合は少し異なりますが、正規表現では重要な機能です。単語の境界とは、単語とスペースとの間の位置のことです。それ以外の位置は、単語の境界ではありません。次の JScript の正規表現は、'Chapter' の先頭の 3 文字と一致します。単語の境界の直後に指定しているためです。
/\bCha/
VBScript の場合。
"\bCha"
'\b' 演算子の位置が重要になります。一致させる文字列の先頭に指定した場合は、単語の先頭が検索対象になります。文字列の最後に指定した場合は、単語の最後が検索対象になります。たとえば、次の正規表現は、単語 'Chapter' の 'ter' と一致します。単語の境界の前に指定しているためです。
/ter\b/
および
"ter\b"
次の正規表現は、単語 'Chapter' の 'apt' と一致しますが、'aptitude' の 'apt' とは一致しません。
/\Bapt/
および
"\Bapt"
これは、'Chapter' の 'apt' は単語の境界にありませんが、'aptitude' の 'apt' は単語の境界にあるためです。単語の境界ではない位置を指定する演算子では、単語の先頭または最後を基準にしないため、演算子を指定する位置は関係ありません。