正規表現

正規表現でエスケープが必要な記号一覧 | 文字クラス内の場合

正規表現でエスケープが必要な記号一覧

正規表現でエスケープが必要な記号一覧

記号読みエスケープ必要?文字クラス内でエスケープ必要?備考
!エクスクラメーションマーク
ダブルクォーテーション
#シャープ
$ドルマーク
%パーセント
&アンパサンド
シングルクォーテーション
(括弧はじめ
)括弧おわり
*アスタリスク
+プラス
,カンマ
ハイフン◯※文字クラス内では先頭か末尾にあればエスケープ不要
.ドット
/スラッシュ-※-※デリミタで使われる場合にはエスケープが必要
:コロン
;セミコロン
<山括弧はじめ
=イコール
>山括弧おわり
?クエスチョンマーク
@アットマーク
[角括弧はじめ◯※文字クラス内では先頭にあればエスケープ不要
\バックスラッシュ
]角括弧おわり
^キャレット,ハット◯※文字クラス内では先頭以外にあればエスケープ不要
_アンダーバー,アンダースコア
`バッククオート
{波括弧はじめ
|パイプ
}波括弧おわり
~チルダ
半角スペース

正規表現でのエスケープとは

正規表現でのエスケープは、メタ文字を単なる文字として扱うための処理です。正規表現では特殊文字の前に「\(バックスラッシュ)」をつけることでエスケープします。たとえば「+」をエスケープしたいときには「\+」とします。

// 正規表現では「+」の前に「\」をおいてエスケープする
30 \+ 70 = 100

// 検索対象
30 + 70 = 100

// 検索結果
30 + 70 = 100

文字クラス内ではエスケープの対象が異なる

正規表現のなかでも文字クラスの中についてはエスケープの扱いが異なります。文字クラス内でもエスケープが必要なのはおおよそ次のとおりです。ただし使い方によってはエスケープ不要なこともあるので後で解説します。

  • -ハイフン
  • [ 角括弧はじめ
  • ] 角括弧おわり
  • ^ キャレット,ハット
  • \ バックスラッシュ

文字クラス内での「-(ハイフン)」

文字クラス内での「-(ハイフン)」は、先頭か末尾にあればエスケープ不要です。先頭か末尾以外にある場合は[a-z]のように使われて範囲を意味する記号になります。

// 検索対象
a-b-c

// 正規表現1:aからzまでを範囲指定
[a-z]
// 結果
a
b
c

// 正規表現2:aとzとハイフンを指定
[az-]
// 結果
a
-
-

// 正規表現3:aとzとハイフンを指定
[a\-z]
// 結果
a
-
-

文字クラス内での「[ ](角括弧)」

文字クラス内での「[ (角括弧はじめ)」は文字クラス内では先頭にあればエスケープ不要です。「] (角括弧おわり)」は文字クラス内だと位置にかかわらずエスケープが必要です。

// 正規表現
[[\]ピカチュウ]+

// 検索対象
[ピカチュウ]

// マッチする文字列
[ピカチュウ]
シャワーズ

「[ (角括弧はじめ)」は言語によってはエスケープが必要であったり、他の方の読みやすさを考慮したりすると、エスケープしたほうが無難ではあります。

文字クラス内での「^(キャレット,ハット)」

文字クラス内での「^(キャレット,ハット)」は、文字クラス内の先頭以外にあればエスケープ不要です。先頭で使われると文字クラス内の記号を否定する意味となります。

// 正規表現
[()^o]+

// 検索対象
(^o^)

// マッチする文字列
(^o^)

上記の場合「[()^o]+」を「[^()o]+」のように位置を入れ替えると、マッチしなくなります。