将“&”替换为到“\&”在 Ruby 中似乎不可能?

发布于 2024-11-18 17:19:14 字数 313 浏览 1 评论 0原文

我想用 String.gsub (或其他方法)将所有 & 字符替换为 \& 。我尝试了几种组合并阅读了这里的另一个问题,但没有任何效果。

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

I want to replace all & characters into \& with String.gsub (or a other method). I've tried several combinations and read another question here, but nothing is gonna work.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

戏舞 2024-11-25 17:19:14

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

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

Your linked question provides a solution - use the block form of gsub:

irb(main):009:0> puts "asdf & asdf".gsub("&"){'\&'}
asdf \& asdf
白龙吟 2024-11-25 17:19:14
ruby-1.9.2-p180 :008 > puts "asdf & asdf".gsub(/&/, '\\\&')
asdf \& asdf
ruby-1.9.2-p180 :008 > puts "asdf & asdf".gsub(/&/, '\\\&')
asdf \& asdf
娇妻 2024-11-25 17:19:14

我猜你用的是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 中为我生成相同的单转义 & 符号,因此将其增加到 4 个(不是 11 个,只是四个就可以了)。

I'm going to guess that you're using 1.8. In 1.8, irb says this:

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

And that matches what you're seeing. But, if you add yet another backslash, you get what you're after:

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

The quadruple backslash approach produces the same singly-escaped ampersand for me in both 1.9.2 and 1.8.7 so turn it up to four (not eleven, just four will do).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文