Skip to content

Instantly share code, notes, and snippets.

@Hamayama
Last active August 12, 2018 10:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hamayama/aaf3df06a4efd11ecc18231d4e5e0c41 to your computer and use it in GitHub Desktop.
Save Hamayama/aaf3df06a4efd11ecc18231d4e5e0c41 to your computer and use it in GitHub Desktop.
文字列中のエスケープ仕様の検討

文字列中のエスケープ仕様の検討

検討

  • 簡単なコマンドを埋め込み可能な文字列データを考える。

  • 例えば、コマンドの開始記号として # を使うことにする。
    (すなわち # を特殊記号とする)

  • このとき、# 文字自身を表したい場合は、\# と記述することにする。
    (すなわち、\ による特殊記号のエスケープを可能とする)

  • これだけでは、\# という2文字を表現することができないため、
    \ 文字自身を表したい場合は、\\ と記述する」というルールも追加する。
    (\# という2文字を、\\\# として記述可能になる)

  • まとめると、以下となる。

ルール

  1. データ内では、コマンドの開始記号として # を使う
  2. データ内で # 文字自身を表したい場合は、\# と記述する
    (\# をエスケープ)
  3. データ内で \ 文字自身を表したい場合は、\\ と記述する
    (\\ をエスケープ)

確認

  1. # という文字を記述可能か? → \#
  2. \ という文字を記述可能か? → \\
  3. # という文字の後にコマンドを記述可能か? → \##(command)
  4. \ という文字の後にコマンドを記述可能か? → \\#(command)
  5. \# という2文字を記述可能か? → \\\#
  6. #\ という2文字を記述可能か? → \#\\

その他 拡張性等

  • 例えば、% という新しい特殊記号を追加した場合、既存データは使用可能か?
    • エスケープ表記 (\# または \\) 以外の 単独の \ を全て \\ に置換し、
      また、% を全て \% に置換すれば 使用可能。
      (すなわち、既存データは変換をかけてから使用する必要がある)
    • ルール 4 として、
      「4. エスケープ表記 (\# または \\) 以外の 単独の \ はエラーとする」
      を入れておけば、上記の \ から \\ への置換は不要になる。
      (データに単独の \ が存在しないことが保証されるため)

(2018-7-1)(2018-7-10)(2018-8-12)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment