2011-04-06 82 views
2

我试图用“\$”替换字符串中前面的“$”。例如,“$5 special”应该变成“\$5 special”。

我已经试过:

"$5 special".gsub(/^\$/, "\$") => "$5 special" 
"$5 special".gsub(/^\$/, "\\$") => "\\$5 special" 
"$5 special".gsub(/^\$/, "\\\$") => "\\$5 special" 

任何人都知道如何做到这一点?

回答

6

你的第二个例子,

"$5 special".gsub(/^\$/, "\\$") 

应该这样做。之所以在输出中看到两个斜线,是因为Ruby将字符串中的斜杠转义为字面值。如果你把它打印到标准输出,你会看到这是你所期望的:

irb(main):009:0> a = "$5 special".gsub(/^\$/, "\\$") 
=> "\\$5 special" 
irb(main):011:0> print a 
\$5 special=> nil 
3

只需使用单引号替代:

>> "$5 special".gsub(/^\$/, '\$') #=> "\\$5 special" 
>> puts "$5 special".gsub(/^\$/, '\$') #=> nil 
\$5 special 
0

gsub可以接受的字符串为好,在这种情况下你不必转义$

"$5 special".gsub("$", '\$') #=> "\\$5 special"