エスケープシーケンス
Java 2014/11/01
以下ののエスケープが使える。
\b
- 0x08
\t
- 0x09 (タブ)
\n
- 0x0a (LF)
\f
- 0x0c
\r
- 0x0d (CR)
\"
"
\'
'
\\
\
\
ooo- 8進数1桁から3桁で文字を表現 (U+0000 〜 U+00FF までしか表現できない)
\u
hhhh- 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桁で表現
\x
hh (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文字列であっても
\u
hhhh と \U
hhhhhhhh のエスケープシーケンスだけは使える。
\0
- 0x00 (Null文字)
\a
- 0x07 (ビープ音)
\b
- 0x08 (バックスペース)
\t
- 0x09 (タブ)
\n
- 0x0a (LF)
\v
- 0x0b (垂直タブ)
\f
- 0x0c (改ページ)
\r
- 0x0d (CR)
\"
"
\'
'
\\
\
\o
ooo- ASCII文字を8進数表記3桁で表現
\x
hh- ASCII文字を16進数表記2桁で表現
\u
hhhh- 16ビットまでのUnicodeを16進数表記4桁で表現。
Python2ではUnicode文字列リテラルの中でのみ使用可能。
Unicode文字列リテラルとは、
u"..."
またはur"..."
のようにu
またはur
を前置した文字列リテラルのこと。 Python2のそれ以外の文字列ではエスケープされずそのまま文字列になる。 Javaと違い、\u
hhhh は文字列の中でのみ使えるエスケープシーケンスである。 16ビットを超える拡張領域のUnicodeはサロゲートペアを使うのではなく下の\U00
hhhhhh を使う。 \U00
hhhhhh- 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桁で表現
\x
hh (数字1桁〜2桁)- ASCII文字を16進数表記2桁で表現
\u
hhhh- 16ビットのUnicodeを16進数表記4桁で表現。
Javaと違い、
\u
hhhh は文字列の中でのみ使えるエスケープシーケンスである。 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
\$
$
。変数展開を回避するために$
はエスケープが必要。\@
@
。変数展開を回避するために@
はエスケープが必要。\c
c\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進数で表現
\x
hh- 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
いったん、''
の文字列を閉じて、それに続けて単独の '
を引用符と区別するためにエスケープを前置して入れ、その後にまた続けて後続の文字列を書く。