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