irb(main):051:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,"#{$1} ?")
=> "ts_id > ?"
irb(main):052:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,"#{$1} ?")
=> "ts_id < ?"
任何人都可以启发我吗?
答案 0 :(得分:5)
问题是变量$1
在运行 gsub
之前插入到参数字符串中,这意味着之前的值{ {1}}是符号被替换的内容。您可以用$1
替换第二个参数以获得预期的效果。
答案 1 :(得分:2)
irb(main):001:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,"#{$1} ?")
=> "ts_id ?"
irb(main):002:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,"#{$1} ?")
=> "ts_id < ?"
请注意,我使用了新的已启动的irb,其中$1
为nil
。这一切都是因为在使用.gsub(...,..$1..)
时,在计算“,
的右侧部分”时,“$1
的左侧部分尚未生成,
”。
这样做:
irb(main):001:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,'\1 ?')
=> "ts_id < ?"
或者这个:
irb(main):001:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/){"#{$1} ?"}
=> "ts_id < ?"