エスケープシーケンスについて

Kazunori Kamiya
Aug 9, 2017 · 4 min read

・Exercise10:エスケープシーケンスとは何か?

前回では、文字列を複数の行に分割して出力する方法を紹介しました。
1つ目の方法では、”\n”を挿入することにより複数行に分割しました。
つまりバックスラッシュ”\”と”n”という2つの文字が、文字列におけるその位置に改行コードを埋め込んだということです。

このバックスラッシュという記号は、入力するのが難しい記号を文字列に組み込んで暗号化します。
あなたが使いたいと思う色々な記号が、エスケープシーケンスとして利用できます。

重要なエスケープシーケンスとして、ダブルクォートとシングルクォートがあります。
文字列を表現する際にダブルクォートを用いますが、その文字列の中にダブルクォートを挿入したい場合、どうすればいいか考えてみてください。
仮に”I “understand” joe.”と書いた場合、understandを取り囲むダブルクォートが文字列の終わりだとRubyは思ってこんがらがってしまいます。
この場合、文字列の中に入るダブルクォートは、ダブルクォートではなくただの文字列の一部だとRubyに伝えなければなりません。

この問題を解決するには、ダブルクォートとシングルクォートをエスケープする必要があり、Rubyがそれらを文字列の中に埋め込む方法を知っています。
ここで例を見てみましょう。

"I am 6'2\" tall."  # escape double-quote inside string
'I am 6\'2" tall.' # escape single-quote inside string

2つ目の方法はトリプルクォート、すなわち”””を用いることで、文字列のような動作をするようになります。
ちょっとそれを使って遊んでみましょう。

出力結果について

上のプログラムを実行すると、以下のようになります。
ここでは、タブ記号が作られたということを確認してください。
きちんとスペースを得られたという点が、非常に重要です。

Rubyのエスケープシーケンスについて

以下が、Rubyでサポートされているエスケープシーケンスの一覧です。
あまり使わないものもあるでしょうが、きちんとその意味も含めて覚えてください。
実際にいくつか文字列の中に入れてみて、ちゃんと動くか確認してみるといいでしょう。

\\・・・ バックスラッシュ\を表示
\’ ・・・シングルクォート’を表示
\”・・・ ダブルクォート”を表示
\a・・・ベル文字(アラート)を表示
\b・・・バックスペース(1文字戻る)
\f ・・・改ページ
\n・・・改行
\r・・・キャリッジリターン
\t・・・タブ
\uxxxx・・・16ビットの16進数表記(ユニコードのみ)
\v・・・垂直タブ
\ooo・・・8進数表記
\xhh・・・16進数表記

学習ドリル

  1. 専用のフラッシュカードにエスケープシーケンスを書いて覚えてください。
  2. ”””の代わりにトリプルシングルクォート’’’を使ったとして、どうなるのか理由も含めて説明できますか?
  3. エスケープシーケンスと文字列のフォーマットを繋げて、より複雑なフォーマットを作成してみてください。

学習ドリルの答え

2. 文字列の場合は”か”””を使って囲むことができますが、この場合はトリプルシングルクォートを使うとエラーになります。なぜなら、”I’ll”のところでシングルクォートが既に使われており、Rubyがシングルクォートを文字列として認識できないからです。もし”””で囲まれた文字列の中に、エスケープシーケンスがなければ大丈夫です。

3.例えば以下のようになります。

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade