Rubyで、
キャプチャ付き正規表現を変数に入れた場合の後方参照が、
うまく行かず困っています。
ご教示お願いします。
環境
$ uname -a 17.5.0 Darwin Kernel Version 17.5.0: Fri Apr 13 19:32:32 PDT 2018; root:xnu-4570.51.2~1/RELEASE_X86_64 x86_64 $ ruby --version ruby 2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]
コード
Ruby
1$ cat regex.rb 2tbl_cmd = [ 3 { regexp: '^ *v +(\d+) *$', 4 cmd: ":direct #{$1}"}, 5] 6cmd = STDIN.gets # v 5 と入力 7tbl_cmd.each do |c| 8 if /#{c[:regexp]}/ =~ cmd 9 puts "match" # => match 10 p $1 # => "5" 後方参照できている 11 p c[:cmd] # => ":direct " 後方参照 $1 の "5" が表示されない 12 p eval(c[c:cmd]) # => :direct で eval しても同様 13 end 14end
実行結果
$ ruby regex.rb v 5 # v 5 と入力 match "5" ":direct "
となり、
v 5 と入力した場合、
if 文中において、$1 とすると、キャプチャした内容を後方参照できているのですが、
p c[:cmd] とすると、
c[:cmd] の、$1 部分は、キャプチャした内容を後方参照できずに、悩んでいます。
p eval(c[:cmd]) でも同様です。
どのようにすればよいか、ご教示いただけないでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/03 12:09 編集