[ruby-list:50638] Regexp部分式呼び出しとキャプチャ
From:
OOTANI TAKASHI <tksotn@...117.cx>
Date:
2018-01-04 14:21:56 UTC
List:
ruby-list #50638
大谷ともうします。
ちょっと腑に落ちない点があるので質問いたします。
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
foo='(a+1)^((b+3)*2)'
p foo.gsub(/
((?<p>\((?:[^()]|\g<p>)*\)))
\^
((?<q>\((?:[^()]|\g<q>)*\)))
/x,'pow(\1,\2)')
#=> "pow(,)"
# 同じ正規表現で $1 $2 だと上手く行く
p foo.gsub(/
((?<p>\((?:[^()]|\g<p>)*\)))
\^
((?<q>\((?:[^()]|\g<q>)*\)))
/x){"pow(#{$1},#{$2})"}
#=> "pow((a+1),((b+3)*2))"
# 簡易版
p foo.gsub(/(\(.*\))\^(\(.*\))/x,'pow(\1,\2)')
#=> "pow((a+1),((b+3)*2))"
正規表現の部分式呼び出しを使うのは初めてで、
試行錯誤したため間違いがあるかも知れませんが、
1番目のケースで\1 \2が空になるのはなぜなのでしょうか?
--
tksotn