エスケープシーケンス
Java 2014/11/01
以下ののエスケープが使える。
\b- 0x08
\t- 0x09 (タブ)
\n- 0x0a (LF)
\f- 0x0c
\r- 0x0d (CR)
\""\''\\\\ooo- 8進数1桁から3桁で文字を表現 (U+0000 〜 U+00FF までしか表現できない)
\uhhhh- Unicodeエスケープといい、16ビットのUnicodeを16進数表記4桁で表現。 正確には文字列で使えるエスケープではなく、ソースコード中のどこでも使えるエスケープシーケンスである。 U+10000以上はサロゲートペアを使う必要がある。
Scala 2015/02/15
ダブルクオーテーション1つの文字列リテラル "..." では
Javaとまったく同じエスケープシーケンスを使える。
Unicodeエスケープが文字列リテラルにかぎらずソースコード中の任意の場所で使えるのもJavaと同じ。
ダブルクオーテーション3つの文字列リテラル """...""" ではUnicodeエスケープ以外のエスケープが効かない。この種類の文字列リテラルはJavaにはない。
PHP 2015/02/15
シングルクオーテーションの文字列リテラル '...' は、エスケープが必要になるのは ' と \ のみになる。'\n' などと書いても \n そのものになって改行にはならない。つまり ' で囲まれている場合、 \ の次に ' または \ 以外が来ても特別な意味にはならない。
echo 'aaa\nttt'; // => aaa\nttt // \n は改行にはならない
echo 'aaa\'ttt'; // => aaa'ttt
echo 'aaa\ttt'; // => aaa\ttt // \t はタブにはならずに \t のまま
echo 'aaa\\ttt'; // => aaa\ttt // \\ は \ になる
ダブルクオーテーションの文字列リテラル "..." は、以下のエスケープが使える。
\0- 0x00 (Null文字)
\t- 0x09 タブ
\n- 0x0a LF
\f- 0x0c
\r- 0x0d CR
\e- 0x1B ESC
\$$。変数展開を回避するために$はエスケープが必要。\""\\\\ooo (8進数1桁〜3桁)- ASCII文字を8進数表記1桁〜3桁で表現
\xhh (16進数1桁〜2桁)- ASCII文字を16進数表記2桁で表現。8ビットを超える文字を直接16進数で表記することはできない。 Unicodeエスケープ参照。
文字列 | PHP Manual
http://php.net/manual/ja/language.types.string.php
Python 2015/02/15
シングルクオーテーションの文字列リテラル '...' もダブルクオーテーションの文字列リテラル "..." も同じエスケープが使える。三重引用符(トリプルクオート、シングルクオーテーション3つまたはダブルクオーテーション3つ)の文字列リテラル '''...''', """...""" も同じ。
', ", ''', """ の直前に r または R をプレフィックスとしてつけると、
raw文字列というものになり、バックスラッシュによるエスケープシーケンスが無効になる。ただし、\' または \" は ' や " になったりせずに \' や \" のままだが、文字列リテルの終端の意味だけはエスケープされる。結果的にraw文字列はバックスラッシュで終わる文字列を書くことができない。このようにraw文字列はPHPの '...' とは少しだけ挙動が異なる。
Python2でur(大文字小文字区別なく)を付けると、raw文字列であっても
\uhhhh と \Uhhhhhhhh のエスケープシーケンスだけは使える。
\0- 0x00 (Null文字)
\a- 0x07 (ビープ音)
\b- 0x08 (バックスペース)
\t- 0x09 (タブ)
\n- 0x0a (LF)
\v- 0x0b (垂直タブ)
\f- 0x0c (改ページ)
\r- 0x0d (CR)
\""\''\\\\oooo- ASCII文字を8進数表記3桁で表現
\xhh- ASCII文字を16進数表記2桁で表現
\uhhhh- 16ビットまでのUnicodeを16進数表記4桁で表現。
Python2ではUnicode文字列リテラルの中でのみ使用可能。
Unicode文字列リテラルとは、
u"..."またはur"..."のようにuまたはurを前置した文字列リテラルのこと。 Python2のそれ以外の文字列ではエスケープされずそのまま文字列になる。 Javaと違い、\uhhhh は文字列の中でのみ使えるエスケープシーケンスである。 16ビットを超える拡張領域のUnicodeはサロゲートペアを使うのではなく下の\U00hhhhhh を使う。 \U00hhhhhh- Unicodeを16進数表記8桁で表現。
Unicodeは最大で21ビットなので、最初の2桁は常に
0にせざるを得ない気がする。 Python2ではUnicode文字列リテラルの中でのみ使用可能。 Python2のそれ以外の文字列ではエスケープされずそのまま文字列になる。
文字列の中でバックスラッシュ(\)を書いて改行すると、次の行に文字列が継続され、バックスラッシュと改行は文字列の中にはなかったことになる。
エスケープシーケンスとして成立しない不適切な \ があると、それはエスケープされずにそのまま文字列の一部になる。
三重引用符(トリプルクオート) '''...''', """...""" での文字列は、改行や三重でない引用符 ', " はエスケープ処理しなくてもそのまま使える。
文字列リテラル | Python 2.7 documentation
http://docs.python.jp/2/reference/lexical_analysis.html#strings
文字列リテラル | Python 3 documentation
http://docs.python.jp/3/reference/lexical_analysis.html#string-and-bytes-literals
Ruby 2015/02/15
ダブルクオーテーションの文字列リテラル "..." は、以下のエスケープが使える。シングルクオーテーションの文字列リテラル '...' ではエスケープが効かない。
\t- 0x09 タブ
\n- 0x0a LF
\f- 0x0c
\r- 0x0d CR
\e- 0x1B ESC
\a- 0x07 ベル
\b- 0x08 バックスペース
\s- 0x20 スペース
\##\""\\\\ooo (数字1桁〜3桁)- ASCII文字を8進数表記1桁〜3桁で表現
\xhh (数字1桁〜2桁)- ASCII文字を16進数表記2桁で表現
\uhhhh- 16ビットのUnicodeを16進数表記4桁で表現。
Javaと違い、
\uhhhh は文字列の中でのみ使えるエスケープシーケンスである。 16ビットを超える拡張領域のUnicodeはサロゲートペアを使うのではなく下の\u{…}を使う。 Unicodeエスケープ参照。 \u{hhhh}- 16ビットのUnicodeを16進数表記2〜6桁で表現。
{}の中はスペースかタブ区切りで複数の文字を表現できる。 Unicodeエスケープ参照。
他の言語と違って、ダブルクオーテーションの文字列リテラル '...' とシングルクオーテーションの文字列リテラル "..." のどちらでも途中に改行を直接入れることができる。ただし "..." の場合、改行の直前にバックスラッシュ(\)を置くと、バックスラッシュと改行がなかったことになる。
p "あい
うえお"
# => "あい\nうえお"
p 'あい
うえお'
# => "あい\nうえお"
p "あい\
うえお"
# => "あいうえお"
p 'あい\
うえお'
# => "あい\\\nうえお"
# バックスラッシュの後に空白があると
p "あい\
うえお"
# => "あい \nうえお"
# バックスラッシュの後に空白があると
p 'あい\
うえお'
# => "あい\\ \nうえお"
バックスラッシュ記法 | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fliteral.html#backslash
Perl 2015/02/15
ダブルクオーテーションの文字列リテラル "..." または qq/.../ は、以下のエスケープが使える。シングルクオーテーションの文字列リテラル '...' または q/.../ ではエスケープが効かない。
文字列リテラル以外にも外部コマンドを実行するバッククオート
`...` または qx/.../ でも以下のエスケープが使える。
シングルクオーテーションの文字列リテラル '...' は、エスケープが必要になるのは ' と \ のみになる。'\n' などと書いても \n そのものになって改行にはならない。つまり ' で囲まれている場合、 \ の次に ' または \ 以外が来ても特別な意味にはならない。
\a- 0x07 ベル
\b- 0x08 バックスペース
\t- 0x09 タブ
\n- 0x0a LF
\f- 0x0c
\r- 0x0d CR
\e- 0x1B ESC
\$$。変数展開を回避するために$はエスケープが必要。\@@。変数展開を回避するために@はエスケープが必要。\cc\cのあとに続く文字によって制御文字を表現。文字がアルファベットの場合大文字小文字を区別しない。
\c@:\x00
\cA:\x01
\cB:\x02
…
\cZ:\x1A
\c[:\x1B
\c\:\x1C
\c]:\x1D
\c^:\x1E
\c_:\x1F
\c?:\x7F\o{ooo}- Unicode文字を8進数で表現。これはPerl5.14以降の機能
\ooo- Unicode文字を8進数で表現
\xhh- ASCII文字を16進数表記1桁または2桁で表現
\x{hhhh}- Unicodeの文字をコードポイント16進数表記6桁までで表現
\N{name}- Unicodeの文字をUnicode文字名で表現
\N{U+hhhh}- Unicodeの文字をコードポイント16進数表記6桁までで表現
\x1C を表す \c\ の2つ目のバックスラッシュはさらにエスケープする必要はなく、単独でよいのだが、その後に続く文字をエスケープする場合があるみたいで、よくわからない。
Pythonにもある垂直タブ0x0bのための特別なエスケープシーケンスはない。
" で囲んだ文字列の中では @ も配列として展開されてしまうので、メールアドレスを文字列で表現したい場合には、' を使うのが無難。
その他にも特別な意味のあるエスケープシーケンスとして \l, \u, \L, \U, \F, \Q, \E がある。
クォートとクォート風の演算子 | perldoc.jp
http://perldoc.jp/docs/perl/5.18.1/perlop.pod#Quote32and32Quote-like32Operators
sh (シェルスクリプト) 2013/09/12
いくつかの記号はシェルで特別な意味を持つので \ でエスケープが必要。
" で囲めば、エスケープが必要になるのは ", $, \, ` のみになる。
' で囲めば、エスケープ処理が不要になるが、 ' を含めることができなくなる。どうしても含めたい場合は以下のようにする。
echo 'o'\''clock'
# => o'clock
いったん、''の文字列を閉じて、それに続けて単独の ' を引用符と区別するためにエスケープを前置して入れ、その後にまた続けて後続の文字列を書く。