Contents
正規表現でエスケープが必要な記号一覧
| 記号 | 読み | エスケープ必要? | 文字クラス内でエスケープ必要? | 備考 | 
|---|---|---|---|---|
| ! | エクスクラメーションマーク | – | – | |
| “ | ダブルクォーテーション | – | – | |
| # | シャープ | – | – | |
| $ | ドルマーク | ◯ | – | |
| % | パーセント | – | – | |
| & | アンパサンド | – | – | |
| ‘ | シングルクォーテーション | – | – | |
| ( | 括弧はじめ | ◯ | – | |
| ) | 括弧おわり | ◯ | – | |
| * | アスタリスク | ◯ | – | |
| + | プラス | ◯ | – | |
| , | カンマ | – | – | |
| – | ハイフン | – | ◯※ | 文字クラス内では先頭か末尾にあればエスケープ不要 | 
| . | ドット | ◯ | – | |
| / | スラッシュ | -※ | -※ | デリミタで使われる場合にはエスケープが必要 | 
| : | コロン | – | – | |
| ; | セミコロン | – | – | |
| < | 山括弧はじめ | – | – | |
| = | イコール | – | – | |
| > | 山括弧おわり | – | – | |
| ? | クエスチョンマーク | ◯ | – | |
| @ | アットマーク | – | – | |
| [ | 角括弧はじめ | ◯ | ◯※ | 文字クラス内では先頭にあればエスケープ不要 | 
| \ | バックスラッシュ | ◯ | ◯ | |
| ] | 角括弧おわり | – | ◯ | |
| ^ | キャレット,ハット | ◯ | ◯※ | 文字クラス内では先頭以外にあればエスケープ不要 | 
| _ | アンダーバー,アンダースコア | – | – | |
| ` | バッククオート | – | – | |
| { | 波括弧はじめ | – | – | |
| | | パイプ | ◯ | – | |
| } | 波括弧おわり | – | – | |
| ~ | チルダ | – | – | |
| 半角スペース | – | – | 
正規表現でのエスケープとは
正規表現でのエスケープは、メタ文字を単なる文字として扱うための処理です。正規表現では特殊文字の前に「\(バックスラッシュ)」をつけることでエスケープします。たとえば「+」をエスケープしたいときには「\+」とします。
// 正規表現では「+」の前に「\」をおいてエスケープする
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]+」のように位置を入れ替えると、マッチしなくなります。
											