こんにちは、フリーエンジニアの長瀬です。
さて、今回のテーマは「Rubyの特殊文字」です。
この記事を見ている人の中には、
- そもそも特殊文字ってなに?
- 特殊文字のエスケープ(無効化)ってどうやるの?
- 特殊文字の削除ってどうやるの?
という疑問を持っている方が多いと思います。
この記事を読めばRubyの特殊文字についてわからないことはなくなります!
早速、説明していきましょう!
特殊文字とは
特殊文字と聞いてピンと来る方は少ないかもしれません。
特殊文字とは英字、数字、カナ、かな、漢字以外のものを指します。
具体的には「¥n」や「¥t」などが該当します。
「¥n」や「¥t」であれば見たことある人も多いのではないでしょうか。
何種類の特殊文字が存在しているのか次の章で見ていきましょう。
特殊文字一覧
記述方法 | 意味 |
---|---|
¥a | ベル |
¥b | バックスペース |
¥e | エスケープ |
¥f | 改ページ |
¥n | 改行 |
¥r | 復帰 |
¥s | 空白(スペース) |
¥t | タブ |
¥v | 垂直タブ |
¥¥ | ¥ |
¥" | " |
¥nnn | 8進数表記のコード(n:0~7) |
¥xnnn | 16進数表記のコード(n:0~f) |
「¥」はPCの環境によって「\」で表すこともあります。
特殊文字をエスケープ(無効化)してみよう
特殊文字に使われることの多い「¥」はエスケープを行うときにも使用します。
エスケープとは特殊な意味を持つ文字を普通の文字として扱うためのものです。
以下に2つのサンプルコードを書きました。
比べてみてください。
エスケープできていないコード
puts "hello"ruby"
[実行結果]
sample.rb:4: syntax error, unexpected tIDENTIFIER, expecting end-of-input puts "hello"ruby"
このように、ダブルクオートは特殊文字であり、2つで始めと終わりを表すので、文字としての”を入力したくてもできません。
エスケープできているコード
puts "hello¥"ruby"
[実行結果]
hello"ruby
このように目的どおり、「”」を表示できました。
エスケープできていないほうでは
puts "hello"ruby"
とあり、「””」で囲まれる部分が分からなくなっています。
そこで下のサンプルのように puts(“hello¥”ruby”) とすることで文字列としての「”」を入力したことになります。
%Q、%qを使って”や’を含んだ文字列を作成する
上記のように、ダブルクオートやシングルクオートをエスケープするのってめんどくさいと思いませんか?
そんなときは、%Qや%qを使いましょう。
大文字の%Qを使う場合は”で文字列を囲んだ場合と同じで、小文字の%qの場合は’で文字列を囲んだ場合と同じように文字列を生成できます。
puts %Q[hello"ruby] puts %q[hello'ruby]
[実行結果]
hello"ruby hello'ruby
このように、いちいちエスケープをしなくても“や’が文字として扱われていることがわかります。
特殊文字の削除
削除という事でお気づきの方も多いとは思いますが、意図せずに特殊文字になってしまうことがあります。
先の章でも挙げましたが、「”」と打てば当然、「””」の一部であるとRubyが解釈する可能性があります。
以下のようなプログラムを考えてみましょう。
string = "aaa¥naaa¥n" puts string
実行結果はこのようになります。
aaa aaa
改行を意味する特殊文字¥nが含まれているので、改行されてます。
しかし、改行をせずに出力したいときもありますよね?
特殊文字を除いて文字列を作成するときは「gsub」メソッドを用いて特殊文字を削除できます。
使い方は次のようにします。
string = "aaa¥naaa¥n" puts string.gsub(/¥n/) { '' }
[実行結果]
aaaaaa
しっかりと「¥n」を文字列から削除ことができていることが分かりますね!
gsubメソッドは文字列の中の該当箇所をすべて置換する場合に重宝します。
ちなみに、すべてではなく該当箇所の始めのものだけを置換する場合はsubメソッドを使用します。
文字列の置換に関してはこちらにまとめられているので、理解が曖昧だったり、知識が0の場合は一読することをおすすめします。
まとめ
いかがだったでしょうか。
特殊文字はプログラム中で文字列を扱う場合によく使います。
特に、ダブルクオテーションやシングルクオテーションを文字列の中に文字として含めたいというということはよく起こることです。
特殊文字をそのまま使いたいときは、あわてずにエスケープできることを思い出しましょう。
Rubyの文字列をしっかり理解したい方に
この記事は文字列を体系的に解説した3ステップで簡単! Rubyの文字列を 完全理解の一部となります。
文字列をさらに理解したい方はこちらを読んでどんどん理解を深めていくようにしましょう。
関連記事