如何根据编码字符串Ruby返回已解码的字符串

时间:2018-06-14 04:24:13

标签: ruby regex decode

对于x ='4 [kl]',输出应为'klklklkl' 对于s ='3 [k2 [b]]',输出应为'kbbkbbkbb'

我一直在使用正则表达式select t1.TitleID, t1.Version, t1.CreatedAt, t2.Version, t2.CreatedAt from reviews t1 join reviews t2 on t1.TitleID = t2.TitleID and t1.Version != t2.Version where (t1.Version > t2.Version and t1.CreatedAt < t2.CreatedAt) 来查找嵌套括号

.scan(/(\[(?:\[??[^\[]*?\]))/)

2 个答案:

答案 0 :(得分:2)

我不确定是否可以在一次传递中完成,但通过递归很容易实现:

%w|4[kl] 3[k2[b]]|.map do |s|
  loop do
    break s if s.gsub!(/(\d+)\[([^\[\]]+)\]/) { $2 * $1.to_i }.nil?
  end
end
#⇒ ["klklklkl", "kbbkbbkbb"]

我们在这里使用String#gsub!在没有匹配的情况下返回nil,终止整个循环。

请注意,上面的代码是 destructing ,表示它突变输入。如果您希望原始字符串保持不变,请提前dup

答案 1 :(得分:2)

s = '3[k2[b]]'
nil while s.sub!(/(\d+)\[([^\[\]]*)\]/){$2 * $1.to_i}
s #=> "kbbkbbkbb"