アンカー

更新 : 2007 年 11 月

これらの例では、章見出しを検索することにだけに注目しました。文字列 Chapter、空白、および章番号の組み合わせは、実際の章見出しである場合もあれば、別の章への参照を示している場合もあります。実際の章見出しは必ず行頭から始まるため、これを利用して参照を表す章見出しを除外し、実際の章見出しだけを検索します。

アンカーの働き

この場合には、アンカーを使用します。アンカーを使用すると、正規表現の一致箇所を行頭または行末に固定できます。また、単語内、単語の先頭、または単語の末尾と一致する正規表現を作成することもできます。正規表現のアンカーとその意味を次の表に示します。

文字

説明

^

入力文字列の先頭と一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合は、\n または \r の直後とも一致します。

$

入力文字列の末尾と一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合は、\n または \r の直前とも一致します。

\b

単語の境界と一致します。単語の境界とは、単語と空白との間の位置のことです。

\B

単語の境界以外と一致します。

量指定子とアンカーは一緒に使用できません。改行コードまたは単語の境界の前後を同時に指定することはできないため、^* などの正規表現は使用できません。

行頭の文字列と一致させるには、正規表現の先頭で ^ を指定します。角かっこ内で使用する ^ とは異なるため、間違えないようにしてください。

行末の文字列と一致させるには、正規表現の最後で $ を指定します。

アンカを使用した次の正規表現で章見出しを検索すると、行頭から始まる章見出しのうち、章番号が 2 桁までのものと一致します。

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

章見出しは行の先頭であるだけでなく、行全体が章見出しとなります。行の先頭であると同時に、同じ行の行末にもなります。次の正規表現では、参照を除外した、実際の章見出しだけに一致します。行の先頭と最後だけに一致するように正規表現で指定しています。

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

単語の境界と一致させる場合は少し異なりますが、正規表現では重要な機能です。単語の境界とは、単語と空白との間の位置のことです。それ以外の位置は、単語の境界ではありません。次の正規表現は、Chapter の先頭の 3 文字と一致します。単語の境界の直後に指定しているためです。

/\bCha/

\b 演算子の位置が重要になります。一致させる文字列の先頭に演算子を指定した場合は、単語の先頭で一致する部分を検索します。演算子を文字列の末尾に指定した場合は、単語の末尾で一致する部分を検索します。たとえば、次の正規表現は、単語 Chapter の文字列 ter と一致します。単語の境界の前に指定しているためです。

/ter\b/

次の正規表現は、単語 Chapter の文字列 apt と一致しますが、aptitude の apt とは一致しません。

/\Bapt/

Chapter の apt は単語の境界にありませんが、aptitude の apt は単語の境界にあります。単語の境界ではない位置を指定する \B 演算子では、単語の先頭または最後を基準にしないため、演算子を指定する位置は関係ありません。

参照

その他の技術情報

正規表現の概説