2010-02-19 113 views
1

红宝石1.8.6(2007-09-24 PATCHLEVEL 111)如何在单引号字符串中转义斜杠?

str = '\&123' 
puts "abc".gsub("b", str) => ab123c 
puts "abc".gsub("b", "#{str}") => ab123c 
puts "abc".gsub("b", str.to_s) => ab123c 
puts "abc".gsub("b", '\&123') => ab123c 
puts "abc".gsub("b", "\&123") => a&123c <--- This I want to achieve using temporary variable 

如果我改变str = '\&123'str = "\&123"它工作正常,但我得到strmatch功能,所以我不能括号内手动指定它.. ..有什么办法可以将字符串的'string'改为"string"的行为吗?

+0

如果你从匹配功能海峡,怎么能有报价?一个字符串是一个字符串,不管它是在某处用单引号还是双引号声明的,或者它的来源是什么都没有区别。你能否重新提出你的问题,以降低混乱程度。 – johannes 2010-02-19 14:56:05

回答

0

简单:

str = '\&123' <-- the result of your match function 
str = str.gsub(/\\/, '\\\\') 

您可能还需要看一看here

+0

我收到以下错误:未知的正则表达式选项-g – Stevo 2010-02-19 09:41:02

+0

@ stevo84您可以省略'g'选项,因为使用'gsub'已经使其成为全局的。 – 2010-02-19 10:20:30

+0

谢谢吉米。鲁比不是我的主要发展语言。我更多的是一个.NET人。 – 2010-02-19 16:44:46

0

只是删除反斜杠:不需要

puts "abc".gsub("b", '&123') 

和号与单引号内反斜线保护(与双引号)。

+0

唯一的问题是,我从match()函数接收到这个字符串,并且它还包含很多其他转义字符串(因为它是一个HTML)。 – Stevo 2010-02-19 10:34:52

0

也许还有一个更简单的方法,但下面的代码工作

> str = '\&123' 
> puts "abc".gsub("b", str.gsub(/\\&/o, '\\\\\&\2\1')) 
> => a\&123c 
0

@Valentin

- >我的意思是,从比赛STR不是逐字。因此,另一个(简单)解决方案的出现,我是不知道的....

"abc".gsub("b") { str } -> a\&123c

相关问题