Ruby 同样的表达式在irb中执行两次时产生不同的值 irb(main):051:0>“ts#u id“ts_id>?” irb(main):052:0>“tsu id“ts_id“ts#u id“ts_id

Ruby 同样的表达式在irb中执行两次时产生不同的值 irb(main):051:0>“ts#u id“ts_id>?” irb(main):052:0>“tsu id“ts_id“ts#u id“ts_id,ruby,regex,Ruby,Regex,谁能启发我 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 < ?" 或者这个: irb(main):001:0> "ts_id <

谁能启发我

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 < ?"
或者这个:

irb(main):001:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,'\1 ?')
=> "ts_id < ?"
irb(main):001:0>“ts#u id“ts_id<?”

问题在于,在运行
gsub
之前,变量
$1
被插入参数字符串中,这意味着
$1
的前一个值就是符号被替换的值。您可以将第二个参数替换为
“\1?”
,以达到预期效果。

您不能在gsub表达式中使用$1。我希望我的英语学得这么好,能够说出这么简短易懂的主要思想“$1在gsub运行之前插入参数字符串…”
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 < ?"