なぜこのエラーが発生するのですか?
Regexp.new("[#$]")
# => SyntaxError: (irb):1: syntax error, unexpected $undefined
# => Regexp.new("[#$]")
# ^
# (irb):1: unterminated string meets end of file
# from ~/.rvm/rubies/ruby-1.9.3-p194/bin/irb:1:in `<main>'
これは、文字通り、単一の$
またはのいずれかで構成される文字列のサブセットを記述する必要があります。#
また、AFAIU Ruby の Regexp エンジンであり、通常はメタ文字ですが、文字クラス内でエスケープする必要はありません#
。$
エラー メッセージから推測すると、Ruby はダブル クォーテーションで囲まれ$
ている場合に補間しようとしていますが、なぜでしょうか? #
注文は重要です。$
および文字には複数の#
オーバーロードされた動作があるため、何がこれを引き起こしているのか途方に暮れています。
PS、参考までに:
/[#$]/
# => SyntaxError: (irb):1: syntax error, unexpected $undefined
/[$#]/
# => /[$#]/
Regexp.new '[$#]'
# => /[$#]/
Regexp.new '[#$]'
# => /[#$]/
Regexp.new "[#$]"
# => SyntaxError: (irb):1: syntax error, unexpected $undefined