-
簡単なコマンドを埋め込み可能な文字列データを考える。
-
例えば、コマンドの開始記号として
#を使うことにする。
(すなわち#を特殊記号とする) -
このとき、
#文字自身を表したい場合は、\#と記述することにする。
(すなわち、\による特殊記号のエスケープを可能とする) -
これだけでは、
\#という2文字を表現することができないため、
「\文字自身を表したい場合は、\\と記述する」というルールも追加する。
(\#という2文字を、\\\#として記述可能になる) -
まとめると、以下となる。
- データ内では、コマンドの開始記号として
#を使う - データ内で
#文字自身を表したい場合は、\#と記述する
(\で#をエスケープ) - データ内で
\文字自身を表したい場合は、\\と記述する
(\で\をエスケープ)
#という文字を記述可能か? →\#\という文字を記述可能か? →\\#という文字の後にコマンドを記述可能か? →\##(command)\という文字の後にコマンドを記述可能か? →\\#(command)\#という2文字を記述可能か? →\\\##\という2文字を記述可能か? →\#\\
- 例えば、
%という新しい特殊記号を追加した場合、既存データは使用可能か?- エスケープ表記 (
\#または\\) 以外の 単独の\を全て\\に置換し、
また、%を全て\%に置換すれば 使用可能。
(すなわち、既存データは変換をかけてから使用する必要がある) - ルール 4 として、
「4. エスケープ表記 (\#または\\) 以外の 単独の\はエラーとする」
を入れておけば、上記の\から\\への置換は不要になる。
(データに単独の\が存在しないことが保証されるため)
- エスケープ表記 (
(2018-7-1)(2018-7-10)(2018-8-12)