アンカー
アンカーを使用すると、正規表現の一致箇所を行頭または行末あるいは入力文字列に固定できます。 また、単語の先頭、単語の末尾、または単語内と一致する正規表現を作成することもできます。
たとえば、正規表現の er\b では、\b はワード境界と一致します。 この正規表現は、"never" の "er" とは一致しますが、"verb" の "er" とは一致しません。
アンカーの働き
正規表現のアンカーとその意味を次の表に示します。
文字 |
説明 |
---|---|
^ |
入力文字列の先頭と一致します。 m (複数行検索) 文字のフラグが設定されている場合、^ は \n または \r の直後とも一致します。 |
$ |
入力文字列の末尾と一致します。 m (複数行検索) 文字のフラグが設定されている場合、$ は \n または \r の直前とも一致します。 |
\b |
ワード境界と一致します。ワード境界とは、単語と空白との間の位置のことです。 |
\B |
ワード境界以外と一致します。 |
量指定子とアンカーは一緒に使用できません。 改行またはワード境界の直前または直後の位置は 1 つに限られるため、^* などの正規表現は使用できません。
行頭の文字列と一致させるには、正規表現の先頭で ^ を指定します。 角かっこ内で使用する ^ とは異なるため、間違えないようにしてください。
行末の文字列と一致させるには、正規表現の最後で $ を指定します。
アンカーを使用した次の正規表現で章見出しを検索すると、行頭から始まる章見出しのうち、章番号が 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/
文字列 "apt" は、"Chapter" ではワード境界以外の位置にありますが、"aptitude" ではワード境界にあります。 ワード境界以外の位置を指定する \B 演算子では、単語の先頭または末尾を基準にしないため、演算子を指定する位置は重要ではありません。