Ruby:如何从字符串中删除尾部反斜杠?

14

我有一个字符串,像这样:

"car\"

我将在postgres数据库中存储一个字符串。 我想在保存之前从字符串中删除反斜杠。 是否有一种方法可以在ruby或postgres中实现这样做? 当我尝试在ruby中删除它时,它会将反斜杠后面的引号视为转义字符。


1
你必须在搜索字符串中的反斜杠前加倍。 - lc.
5个回答

37

请看以下代码:

1.9.3p125 :022 > s = "cat\\"
 => "cat\\" 
1.9.3p125 :023 > puts s
cat\
 => nil 
1.9.3p125 :024 > s.chomp("\\")
 => "cat" 
1.9.3p125 :025 > 

Ruby的chomp方法就是为了这个目的而设计的。http://www.ruby-doc.org/core-1.9.3/String.html#method-i-chomp - scarver2

2

去除末尾的反斜杠:

"car\\".gsub!(/\\$/, "")

注意反斜杠本身也需要用反斜杠转义。

2

虽然人们很少这样做,但 Ruby 的 String 类支持以下功能:

irb(main):002:0> str = 'car\\'
=> "car\\"
irb(main):003:0> str[/\\$/] = ''
=> ""
irb(main):004:0> str
=> "car"

这是一个有条件的搜索,用于查找尾部的'\',并将其替换为空字符串。

问题是我的Rails应用程序从前端(由用户错误地)接收到一个单个的尾随反斜杠,我需要将其存储在数据库中。有关如何处理这种情况的任何线索吗? - Ari53nN3o
这就是示例所展示的内容。一个单独的反斜杠。'car\'创建了一个包含单个尾随反斜杠的字符串。最后一行显示了单个尾随反斜杠被移除的情况。 - the Tin Man

0
puts '"car\"'.gsub(/\\(")?$/, '\1')

这样就可以了,但是,斜杠后面总是跟着引号吗?


1
/\\(")*$/ 这种处理可能存在的尾引号的方式非常笨拙,实际上意味着“零个或多个”尾引号。 - the Tin Man

-3

看一下说的是什么

str.dump

进行操作,然后尝试对其进行操作。


如果字符串没有尾部反斜杠会发生什么? - the Tin Man
当涉及到 Ruby 时,我们需要详细了解这个字符串的样子是什么? ""car\", ""car\""? - Adam
@theTinMan 在文档中写明,如果没有进行替换操作,则返回nil。如果未提供块和替换,则返回str或nil。如果没有块和替换,则返回一个枚举器。http://ruby-doc.org/core-2.3.1/String.html - DevJ3rry
你来晚了。原始答案使用了 str.chop,但在我提问后不久被更改为 str.dump。我的评论是针对使用 chop 不符合 OP 的要求。两者都没有像你说的那样有文档记录。 - the Tin Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接