旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

誤った文字のエスケープをした時の挙動比較

2009年1月20日

“\n” は大体どの言語でも1バイトの改行文字として解釈されますが、
“\w” などの「エスケープ出来ない文字をエスケープしようとした時」の挙動が不明で、
調査をしました。

以下、Python/PHP/Ruby/JavaScriptで比較してます。

Python-2.5.2

>>> "\n"
'\n'
>>> "\r"
'\r'
>>> "\w"
'\\w'

誤ったエスケープの場合は、文字列の “\” として解釈されます。

PHP-5.2.6
※末尾の改行文字はターミナルへ出力するためなので無視して下さい。

$php -r 'echo "\w\n";'
\w
$php -r 'echo "\n\n";'

Pythonと同じく文字列の “\” になります。

Ruby-1.8.6

irb(main):001:0> "\n"
=> "\n"
irb(main):002:0> "\w"
=> "w"
irb(main):003:0> "\w" == "w"
=> true

“\” はないものとして解釈されるようです。

JavaScript

>>> "\n"
"
"
>>> "\w"
"w"
>>> "\w" === "w"
true

Rubyと同じように、”\” が消え去ります。

ということで「”\”を文字列として解釈する」派と
「ないものとして解釈する」派、があることがわかりました。

正規表現を文字列で書くときは混乱の元になるので、
出来れば明示的に “\\w” ってやってもらえたりすると助かるなー、と切に願います。