2011-10-30 13 views
1

エスケープ文字を使用する正規表現とリテラル文字を使用する正規表現の間には実用的な違いはありますか?私。それらとのマッチングが異なる結果を返す状況はありますか? Rubyでリテラル対エスケープ文字を使用した正規表現

例:

literal = Regexp.new("\t") 
=>//
escaped = Regexp.new("\\t") 
=> /\t/ 

# They're different... 
literal == escaped 
=> false 

# ...but they seem to match the same: 
"Hello\tWorld".match(literal) 
=> #<MatchData "\t"> 
"Hello\tWorld".match(escaped) 
=> #<MatchData "\t"> 
+0

@Tim Pietzcker - この質問は\ tや\ nのようなエスケープ文字にのみ適用し、\ bや\ sのようなSEQUENCESはエスケープしないことを明確にしてくれてありがとう。それをより明確にするために編集します。 – belteshazzar293

答えて

1

いいえ、\t(又は\n)の場合です。しかし、それは他のほとんどのケースで

動作しません(例えば、どちらかが持っていないエスケープシーケンスを1:文字列中の1当量\sまたはどこ意味が\bのように異なりますようにエスケープ)ので、それは一般的に良いアイデアですエスケープされたバージョンを使用する(または最初に/.../を使用して正規表現を構築する)。

関連する問題