誤った文字のエスケープをした時の挙動比較
2009年1月20日
“\n” は大体どの言語でも1バイトの改行文字として解釈されますが、
“\w” などの「エスケープ出来ない文字をエスケープしようとした時」の挙動が不明で、
調査をしました。
“\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” ってやってもらえたりすると助かるなー、と切に願います。