開発ブログ
Git、CSS、HTML、正規表現など、入門者がつまづきそうなポイントを中心に、役立ち情報発信します。。

正規表現:行の先頭「^(ハット、キャレット)」

最終更新:2018-08-09 by Joe

正規表現で頻出の、「^」の意味です。

文頭を意味する「^」

「^」はハット、キャレットなどと読みますが、正規表現では、「文頭」や「行頭」を意味します。このような位置を限定するメタ文字はアンカー(位置指定子)と呼ばれます。

よく似た働きを持つアンカーに「$」があります。「$」は、「^」の反対で、「文末」「行末」をいするメタ文字です。

「^」が示す、「文頭」の定義

ファイル内のテキストを処理する際に「文頭」を改行の直前とするのか、改行を含む、テキストファイル全体の文とするのかは、正規表現エンジンの仕様次第です。

例えば、PHPの正規表現エンジンであるPCREにおいては、「^」「$」はテキスト全体の最初と最後と定義されています。このように、改行を含んで全文のテキストを1文とみなす処理を「シングルラインモード」と言い、これに対して改行で区切って1文とみなす処理を「マルチラインモード」と言います。

シングルライン・マルチラインは、通常は、修飾子を使って指定でき、特に PCRE においては、m でマルチラインを指定できます。以下、PHP.net:パターン修飾子 より抜粋です。

m (PCRE_MULTILINE)

デフォルトで、PCRE は、検索対象文字列を(実際には複数行からなる 場合でも)単一の行からなるとして処理します。 「行頭」メタ文字 (^) は、対象文字列の最初にしかマッチしません。 一方、「行末」メタ文字 ($) は、文字列の最後、または (D 修飾子が設定されていない場合) 最後にある改行記号の前のみにしかマッチしません。 この動作は Perl と同じです。 この修飾子を設定すると、「行頭」および「行末」メタ文字は 対象文字列において、文字列の最初と最後に加えて、 各改行の直前と直後にそれぞれマッチします。 この動作は、Perl の /m 修飾子と同じです。 対象文字列の中に “\n” 文字がない場合や、 またはパターンに ^ または $ がない場合は、 この修飾子を設定しても意味はありません。

「^」を使った正規表現

「^」を正規表現の使った例です。

// 最初が焼き肉で始まる1文
^焼き肉.*$

// すき焼きを含む1文
^.*すき焼き.*$

^ の参考情報

正規表現の基本と、メタ文字の一覧をこちらにまとめています。

 

閉じる