エスケープシーケンスを使って特殊文字を記述する

文字の中には改行やタブなど直接キーボードからテキストエディタに記述できない文字があります。このような特殊な文字を記述するときに利用するのがエスケープシーケンスです。ここでは Perl のプログラムの中でエスケープシーケンスを使って改行などの特殊文字を記述する方法について解説します。

(Last modified: )

エスケープシーケンスの使い方

ほとんどの文字や数値は直接入力することができますが、改行などテキストとして入力を行えない特殊な文字があります。例えば改行の文字を入力するためにテキストエディタ上で Enter キーを押しても、テキストが改行されるだけで改行を表す文字としては入力ができません。

このような特殊な文字を入力するために \ 記号+ 1 文字などを使い別の単語として記述することができます。このような特殊な記述の仕方をエスケープシーケンスと言います。

よく利用されるものでは次のようなものがあります。

\a        警報音
\b        バックスペース
\n        改行
\r        復帰
\f        改ページ
\t        水平タブ
\e        ESC
\\        文字としての\
\$        文字としての$
\@        文字としての@
\;        文字としての;
\'        シングルクォーテーション(')
\"        ダブルクォーテーション(")
\ooo      8進数
\xhh      16進数
\cX       コントロール文字(\cCならCtrl+C)
\l文字    文字を小文字
\u文字    文字を大文字
\L...\E   ...を小文字
\U...\E   ...を大文字
\Q...\E   ...の中のメタ文字をエスケープ

エスケープシーケンスは文字列を構成する 1 つの文字として文字列の中に他の文字と組み合わせて記述することができます。代表的なものとしては改行の \n があります。文字列を定義する時に改行したい位置に \n と記述することで改行を行わせることができます。

"こんにちは\nおはようございます"

上記を出力すると次のように表示されます。

こんにちは
おはようございます

なおエスケープシーケンスが特別な解釈をされるのは文字列がダブルクオーテーションで囲まれている場合です。例えばシングルクオーテーションで文字列を囲った場合に、エスケープシーケンスが記述されていても一部の例外を除いてそのままの文字として解釈されます。

'こんにちは\nおはようございます'

上記を出力すると次のように表示されます。

こんにちは\nおはようございます

今回の場合は文字列中に含まれる \n は改行という意味ではなく "\" と "n" と言う文字がただ並んだものとして解釈されます。

シングルクオーテーションで囲まれた文字列の中でエスケープシーケンスとして意味を持つものは \'\\ だけです。それぞれ文字としての "'" と "\" を記述する場合に使用します。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

print "こんにちは\nおはようございます\n";
print 'こんにちは\nおはようございます\n';

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

エスケープシーケンスの使い方(1)

同じ文字列を出力していますが、最初の文字列はダブルクオーテーションで囲まれているため文字列中の \n が改行として解釈されて出力されています。次の文字列ではシングルクオーテーションで囲まれているため文字列中の \n はそのままの文字として出力されています。

文字としての「\」や「"」を文字列の中に記述する

エスケープシーケンスではキーボードから入力しにくい文字を別の単語として表す利用方法の他に、キーボードから入力はできるけれども他の理由で表示できない文字を表す場合にも使われます。

例えば "\" という文字をエスケープシーケンスのための文字ではなく、文字として表示したい場合です。文字列の中に "\" と "n" が続けて記述された場合を考えて下さい。

"abcd\nefg"

文字として "\" を表示したいにも関わらず \n が改行を表すエスケープシーケンスとして扱われてしまうためこの文字列は次のように解釈されます。

abcd
efg

そこで "\" をエスケープシーケンスの特殊な文字としてではなく単なる文字として扱いたい場合には "\\" と記述します。

"abcd\\nefg"

今回の場合は "\\" が "\" と言う文字として扱われますので次のように解釈されます。

abcd\nefg

同じように「"」文字を文字列の中で使用しようとすると、文字列の終端を表す「"」と区別するために「\"」のように記述することで文字として「"」を扱うことができます。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

print "abc\ndef\n";
print "abc\\ndef\n";
print "aaa\"bbb\n";

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

エスケープシーケンスの使い方(2)

エスケープシーケンスとして特別な意味を持つ \ や、文字列を定義する時に使用される " も表示することができます。

-- --

Perl のプログラムの中でエスケープシーケンスを使って改行などの特殊文字を記述する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。