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]+」のように位置を入れ替えると、マッチしなくなります。