【问题标题】:Replace "&" to "\&" in Ruby seems impossible?在 Ruby 中将“&”替换为“\&”似乎是不可能的?
【发布时间】:2011-09-28 00:02:19
【问题描述】:

我想用String.gsub(或其他方法)将所有& 字符替换为\&。我尝试了几种组合并阅读了another question here,但没有任何效果。

  "asdf & asdf".gsub("&", "\\\&") => "asdf & asdf"

【问题讨论】:

    标签: ruby string replace escaping


    【解决方案1】:

    我猜你使用的是 1.8。在 1.8 中,irb 是这样说的:

    >> "asdf & asdf".gsub("&", "\\\&")
    => "asdf & asdf"
    >> puts "asdf & asdf".gsub("&", "\\\&")
    asdf & asdf
    

    这与您所看到的相符。但是,如果你再添加一个反斜杠,你就会得到你想要的:

    >> puts "asdf & asdf".gsub("&", '\\\\&')
    asdf \& asdf
    

    四倍反斜杠方法在 1.9.2 和 1.8.7 中为我生成了相同的单转义 & 符号,因此将其设置为四个(不是 11 个,只有 4 个就可以了)。

    【讨论】:

      【解决方案2】:

      您的链接问题提供了一个解决方案 - 使用 gsub 的块形式:

      irb(main):009:0> puts "asdf & asdf".gsub("&"){'\&'}
      asdf \& asdf
      

      【讨论】:

      • 确实如此,因为替换字符串是' 分隔的。试试puts "asdf ' asdf".gsub("'"){"\\'"}
      【解决方案3】:
      ruby-1.9.2-p180 :008 > puts "asdf & asdf".gsub(/&/, '\\\&')
      asdf \& asdf
      

      【讨论】:

      • 这不是一团糟。如果没有puts,您将得到result.inspect,对于一个字符串,它会为您提供字符串,因为您必须用双引号键入它才能获得result
      猜你喜欢
      • 2014-12-19
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多