正規表現のアンカー — ^、$、\b 単語境界の解説

正規表現のアンカーをマスター:^ は文字列の先頭、$ は文字列の末尾、\b は単語境界、\B は非単語境界。パターンがマッチする位置を制御します。

Anchors

詳細な説明

正規表現のアンカーと境界

アンカーは文字にマッチするのではなく、文字列内の位置にマッチします。パターンが正しい位置でマッチすることを保証します。

先頭と末尾のアンカー

アンカー 位置
^ 文字列の先頭(m フラグでは行の先頭)
$ 文字列の末尾(m フラグでは行の末尾)

アンカーなしでは、\d+ は文字列のどこでも数字にマッチします。アンカー付きの ^\d+$ は文字列全体が数字の場合のみマッチします。

複数行モード

m フラグを使うと、^$ は文字列全体ではなく各行の先頭と末尾にマッチします:

Input:   "line 1\nline 2\nline 3"
Pattern: ^line(m フラグ付き)
Matches: 各行の先頭の "line"(3マッチ)

単語境界 \b

\b アンカーは単語文字(\w)と非単語文字(\W)の境界、または単語文字と文字列の先頭/末尾の間にマッチします。

Pattern: \bword\b
Matches: "a word here" の "word"
Skips:   "sword", "wordy", "keyword"

これはサブストリングに誤ってマッチすることなく、単語全体にマッチさせるのに非常に役立ちます。

非単語境界 \B

\B は単語境界ではない位置にマッチします。単語の内部にマッチします。

Pattern: \Bword
Matches: "sword" の "word"(単語内部)
Skips:   文字列の先頭の "word"

よく使うアンカーパターン

  • ^$ — 空文字列または空行にマッチ
  • ^\s*$ — 空白行(空白のみ)にマッチ
  • \b\w{5}\b — 正確に5文字の単語にマッチ
  • ^(?!#).*$# で始まらない行にマッチ(m フラグ付き)

ユースケース

入力全体がパターン(電話番号や郵便番号など)にマッチすることを検証する、サブストリングにマッチせずに単語全体を見つける、または複数行モードでテキストを行ごとに処理する必要がある場合。

試してみる — Regex Cheat Sheet

フルツールを開く