【问题标题】:Ruby: How to remove trailing backslashes from a string?Ruby:如何从字符串中删除尾随反斜杠?
【发布时间】:2012-10-15 14:18:34
【问题描述】:

我有一个类似的字符串

"car\"

我将存储在 postgres db 中。我想在保存之前从字符串中删除反斜杠。有没有办法在 ruby​​ 或 postgres 中做到这一点?当我尝试在 ruby​​ 中删除它时,它会将反斜杠后的引号视为转义字符。

【问题讨论】:

  • 您必须将搜索字符串中的反斜杠加倍。

标签: ruby-on-rails ruby string postgresql


【解决方案1】:

见以下代码:

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 > 

【讨论】:

【解决方案2】:

人们做的不多,但是 Ruby 的 String 类支持:

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

这是对尾随 '\' 的条件搜索,并替换为空字符串。

【讨论】:

  • 问题是我的 rails 应用程序从前端接收到一个尾随反斜杠(被用户误认为),我需要将其存储在数据库中。关于如何处理这种情况的任何线索?
  • 这就是示例所展示的内容。单个尾随反斜杠。 'car\\' 创建一个包含单个尾部反斜杠的字符串。最后一行显示删除了单个尾随反斜杠。
【解决方案3】:

要删除尾部反斜杠:

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

请注意,反斜杠必须用反斜杠自行转义。

【讨论】:

    【解决方案4】:
    puts '"car\"'.gsub(/\\(")?$/, '\1')
    

    这样就可以了, 但是,结尾的斜杠总是在 en 后跟引号吗?

    【讨论】:

    • /\\(")*$/ 是处理可能的尾随引号的一种非常尴尬的方式,实际上意味着“零个或多个”尾随引号。
    【解决方案5】:

    看看怎么说

    str.dump
    

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

    【讨论】:

    • 如果字符串没有尾部有反斜杠会怎样?
    • 当然,当涉及到 ruby​​ 时,我们需要详细了解这个字符串的外观? "\"汽车\\", "\"汽车\\\""?
    • @theTinMan 在文档中说将返回 nil returning str, or nil if no substitutions were performed. If no block and no replacement is given, an enumerator is returned instead. ruby-doc.org/core-2.3.1/String.html
    • 你迟到了。原始答案使用str.chop,并在我提出问题后不久更改为str.dump。我的评论是针对不符合 OP 要求的 chop 的使用。你所说的都没有记录。
    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2021-02-11
    相关资源
    最近更新 更多